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的方法:
//3. module对象
module.exports = function() {
console.log('hello world');
}
通过module对象,test.js文件导出的从一个普通对象变成了fucntion:
//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());
执行结果:
结论是:私有变量不会因为require
次数而被初始化多次。
- 二进制模块:NodeJS也支持使用C/C++编写二进制模块。编译好的二进制模块除了文件扩展名是.node外,和JS模块的使用方式相同。
入门篇回顾:
- NodeJS是一个JS脚本解析器,任何操作系统下安装NodeJS本质上做的事情都是把NodeJS执行程序复制到一个目录,然后保证这个目录在系统PATH环境变量下,以便终端下可以使用
node
命令。 - 终端下直接输入
node
命令可进入命令交互模式,很适合用来测试一些JS代码片段,比如正则表达式。 - NodeJS使用CMD模块系统,主模块作为程序入口点,所有模块在执行过程中只初始化一次。
- 除非JS模块不能满足需求,否则不要轻易使用二进制模块,否则你的用户会叫苦连天。
行为影响状态,状态影响视图