Node.js笔记

简介

nodejs是一个js解析器,类似Python,可以直接运行js文件或者在交互命令中运行js代码,安装好了nodejs之后只要运行node.exe就能进入交互式环境

模块

require,require类似Python里面的import,用于将一个模块导入到当前模块,但是require的使用形式类似函数,使用如下:

main.js

//这一行代码引入相同路径下的tt.js作为一个模块,赋值给变量a
var a=required('./tt');
a.helllo();//输出hello
console.log(a==a.ex);//输出true

tt.js

//exports对象是一个模块的导出对象,上面main.js里面的
exports.hello=function(){
    console.log('hello');
}
exports.ex=function(){
    return exports;
}

module,module对象可以在本模块内部访问到,里面包含模块的一些信息,可以通过设置module模块来设置这些信息,例如替换模块的exports:

module对象实例

Module {
  id: 'D:\\workspace\\softwares\\node\\hello.js',
  exports: { hello: [Function], md: [Circular] },
  parent:
   Module {
     id: '<repl>',
     exports: {},
     parent: undefined,
     filename: null,
     loaded: false,
     children: [ [Circular] ],
     paths:
      [ 'D:\\workspace\\softwares\\node\\repl\\node_modules',
        'D:\\workspace\\softwares\\node\\node_modules',
        'D:\\workspace\\softwares\\node_modules',
        'D:\\workspace\\node_modules',
        'D:\\node_modules',
        'C:\\Users\\Administrator\\.node_modules',
        'C:\\Users\\Administrator\\.node_libraries',
        'D:\\workspace\\softwares\\lib\\node' ] },
  filename: 'D:\\workspace\\softwares\\node\\hello.js',
  loaded: true,
  children: [],
  paths:
   [ 'D:\\workspace\\softwares\\node\\node_modules',
     'D:\\workspace\\softwares\\node_modules',
     'D:\\workspace\\node_modules',
     'D:\\node_modules' ] }

NODE_PATH环境变量,可以通过指定NODE_PATH环境编辑指定包加载的路径,类似CLASSPATH环境变量。

包和入口模块,通常会将一个文件夹称为一个包,并且使用包来管理模块,为每一个包设置一个入口模块,在入口模块里面返回包里的所有模块:

模块1

exports.create=function(){
    return exports;
}

模块2

exports.create=function(){
    return exports;
}

入口模块

var m1=require('./m1');
var m2=require('./m2');
var name='module name';
exports.create=function(){
    return{
        name:name,
        m1:m1.create(),
        m2:m2.create()
    }
}
需要使用的时候只用使用main模块的create方法获取所有模块的引用就可以了

index.js ,当文件名为index.js的时候require不用写模块名,下面两条语句等价

var c= require('/home/user/lib/cat');
var c= require('/home/user/lib/cat/index');

package.json,package.json是定义当前路径的模块路径的配置文件,假如在/path/package.json 里面写了这样的代码:

package.json

{
    "name":"path",
    "main":"./lib/main.js"
}

那么`require(‘path’)就会导入path/lib/main.js这个文件,package.json字段全解

node.js可以使用read/writeFileSync(path)读取文件或写文件,这样会将整个文件都放到内存中间去,node.js使用createRead/WriteStream(path)创建文件的读写流。

读取的内容可以使用toString()方法转换成字符串。

node.js和java一样,使用引用控制实例,两个引用指向同一个实例的时候修改会同时应用到两个实例。

事件回调机制

nodejs使用events模块实现事件回调,即为某一个事件绑定一个handler函数,手动触发事件调用事件处理函数。实现的功能很像c#里面的时间委托。

//导入模块
var events=require("events");
//建立时间发射器
var eventEmitter=new events.EventEmitter();
//声明事件处理函数
var eventHandler=function(){
    console.log("test");
}
//绑定处理函数
eventEmitter.on('test',eventHandler);
//可以绑定多个处理函数
eventEmitter.on('test',function(){
    console.log('tet');
});
//触发事件
eventEmitter.emit('test');

利用events实现任务定时调度

//导入模块
var events=require("events");
//建立时间发射器
var eventEmitter=new events.EventEmitter();
//声明事件处理函数
var eventHandler=function(){
    console.log("test");
}
//绑定处理函数
eventEmitter.on('test',eventHandler);
//可以绑定多个处理函数
eventEmitter.on('test',function(){
    console.log('tet');
});
//1000秒触发事件
function run(){
    setTimeout(function(){
        eventEmitter.emit('test');
        run();
    },1000);
}
run();

路径解析

nodejs的路径解析模式不是总是在当前目录搜索,当前目录搜索不到的话会一直向上搜索,如在/dir1/dir2/test.js里面使用如下代码require('module'),则搜索路径依次是:

/dir1/dir2/node_modules/module
/dir1/node_modules/module
/node_modules/module

也就是只要上层目录里面有node_modules目录里面有这个模块就行

猜你喜欢

转载自blog.csdn.net/fate_killer_liu_jie/article/details/53506033