NodeJs学习笔记一

教程参考

  • 进入命令交互模式
//立即执行
$ node
> console.log('hello world!');
hello world!

//执行js文件
//hellow.js内容
function hello (){
    console.log('hello world!');
}
hello();

//键入node hello.js
$ node hello.js
hello world!

  • 模块
    • require方法:用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。模块名可使用相对路径(以./开头),或者是绝对路径(以/或C:之类的盘符开头)。另外,模块名中的.js扩展名可以省略。
    • exports对象:是当前模块的导出对象,用于导出模块公有方法和属性。别的模块通过require函数使用当前模块时得到的就是当前模块的exports对象。
    • module对象:通过module对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象。
    • 主模块的概念:通过命令行参数传递给NodeJS以启动程序的模块被称为主模块。主模块负责调度组成整个程序的其它模块完成工作。
//1. require
var foo1 = require('./foo');
var foo2 = require('./foo.js');
var foo3 = require('/home/user/foo');
var foo4 = require('/home/user/foo.js');

我的案例中,test.js导出一个hello方法,然后在test2.js中通过require方法获得。开始测试exports对象和module对象执行结果的不同。

//2. exports对象

//导出一个方法
exprots.hello = function() {
    console.log('hello world');
}

exports导出的是一个对象,这个对象有一个hello的方法:

image

//3. module对象
module.exports = function() {
    console.log('hello world');
}

通过module对象,test.js文件导出的从一个普通对象变成了fucntion:

image

//4. 主模块和子模块的私有变量
//test.js
var counter = 1;
function count(){
    return counter ++;
}

exports.count = count;

//test2.js
var count1 = require('./test');
var count2 = require('./test');
console.log(count1.count());
console.log(count2.count());
console.log(count2.count());

执行结果:

image

结论是:私有变量不会因为require次数而被初始化多次。

  • 二进制模块:NodeJS也支持使用C/C++编写二进制模块。编译好的二进制模块除了文件扩展名是.node外,和JS模块的使用方式相同。

入门篇回顾

  1. NodeJS是一个JS脚本解析器,任何操作系统下安装NodeJS本质上做的事情都是把NodeJS执行程序复制到一个目录,然后保证这个目录在系统PATH环境变量下,以便终端下可以使用node命令。
  2. 终端下直接输入node命令可进入命令交互模式,很适合用来测试一些JS代码片段,比如正则表达式。
  3. NodeJS使用CMD模块系统,主模块作为程序入口点,所有模块在执行过程中只初始化一次。
  4. 除非JS模块不能满足需求,否则不要轻易使用二进制模块,否则你的用户会叫苦连天。
posted @ 2017-01-21 16:10  君寻不惑  阅读(154)  评论(0编辑  收藏  举报