NodeJs学习之路(1)

NodeJs主要干的工作
    nodejs主要可以完成的工作就是在Web场景下使用,是对前端最友好的后端语言,主要是在高并发,非阻塞I/O密集下使用,但是不适合CPU使用密集、非阻塞I/O不多的情况下使用。很多情况下NodeJS在性价比方面不是最好的,但是对于前端开发者而言python和java语言并不是太友好。。。学习成本高,后台也并不是太清楚前端,也懒得写(哈哈哈主要是这个)。而NodeJs可以在server上跑,它也可以处理文件和进行编译工作,虽然性能相比其他主流后台语言慢了一些但是对于前端来说无疑是最友好的后台语言了~~

从头开始我们首先安装NodeJS

    由于网路限制的原因我们可以在 http://nodejs.cn/ 也就是node中文网站下载node安装包,按安装程序走,完成安装后在cmd命令窗口输入node -v查看是否安装成功,目前我用的是v8.7.0版本。随着前端的工作越来越复杂,代码规范逐渐走向了模块化,所以nodejs中使用了CommonJs来规范代码。CommonJs将nodeJs的每个文件都视为一个模块,而每个模块独有自己的作用域,每个文件中的变量只能自己的文件使用,在编译时nodejs会自动将文件用function函数将其包裹起来,所以变量都为局部变量。在文件内部也就是模块module代表模块的本身,module.exports代表该模块的对外接口,这里我们可以从中调用我们需要的值。有输出自然接受,在nodejs中所使用的接受方法为“require”。nodejs文件的执行只会执行一次,若是内部有调用会等调用文件完毕再执行下面的步骤。
    以下有四个代码块可以解释该关系:四个文件分别为xunhuanA.js,xunhuanB.js,xunhuanC.js,xunhuan_main.js,前三个文件是三个子文件,通过xunhuan_main.js来调用它们,以下为代码实例:

xunhuanA.js:

module.exports.test = 'A';

const modB = require('./xunhuanB');

console.log('====================================');
console.log('xunhuanA:', modB.test);
console.log('====================================');

module.exports.test = 'AA'

xunhuanB.js

module.exports.test = 'B';

const modA = require('./xunhuanA');

console.log('====================================');
console.log('xunhuanB:', modA.test);
console.log('====================================');

const modC = require('./xunhuanC');

console.log('====================================');
console.log('xunhuanB(c):', modC.test);
console.log('====================================');

module.exports.test = 'BB'

xunhuanC.js

module.exports.test = 'C';

const modB = require('./xunhuanB');

console.log('====================================');
console.log('xunhuanC:', modB.test);
console.log('====================================');

module.exports.test = 'CC'

xunhuan_main.js

const modA = require('./xunhuanA');

当执行A时导入了B,B文件的内部执行,当B调用到A时采用的变量是A停止时的变量,而非A整体文件执行完毕的变量。执行到C文件时C文件的内部先执行,在const modB = require(‘./xunhuanB’);这里会调用到B停止时的输出变量‘B’而非‘BB‘与A文件同理。在C整体执行完毕后,将最新的变量传递到B去,B执行完毕将变量传递A去。可能有一些抽象,画为图形的话就容易理解了。(“灵魂画手”见谅~):
这里写图片描述
在xunhuan_main.js中只调用了A文件就可将ABC文件执行完毕,可以继续添加BC文件,方便真实使用的情况下调用。当然这种互相引用循环在使用时不可取,我们在使用时不要使用这种方法。

nodejs有自己的模块系统,可以引用模块完成工作,其中有个模块名为fs模块,全称为file system,主要是做文件的读写改查功能,在nodejs中直接引用即可,为require('fs').以下为简单的文件获取写法:
const fs = require('fs');

const result = fs.readFile('./fs.js', (err,data) => {  //回调函数
  if(err) {
    console.log(err);
  }else {
    console.log(data.toString());//fs模块是操作二进制流的,我们想要看懂需要将其转化为字符串。
  }
});

console.log('====================================');
console.log(result); //node运行机制为异步操作,这里只是按顺序进行得到的值,并不会得到里边的值,需要一个回调函数才能得到读取文件的值
console.log('====================================');

读者可以自己试一下。

nodejs引用第三方模块
        这里引用的是chalk模块,因为为第三方模块,和上述的fs不同,需要手动安装一下,在命令行工具里输入npm install chalk。这个模块可以改变命令行输出的样式效果,比如将输出的字变成不同样的颜色,加下划线阴影等等。有兴趣的可以查API。以下为示例:
const chalk = require('chalk');

console.log(chalk.yellow('this is yellow'));
console.log(chalk.bgGreen('this is green'));
exports与module.exports的区别
module.exports作为nodejs文件的输出口存在,exports只是作为默认的代表module.exports的变量名,就是  
const exports = module.exports

当exports输出基本的类型如字符串数字等时,是好用的(可以少写个module),但是当exports输出的是引用变量就不一样了,输出的对象会将exports的指针变向该对象,而不是默认的module.exports了,所以在导出对象的时候需要使用module.exports就是可以的了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值