引用官方定义
Definition:
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
node.js是基于Chrome's V8的JavaScript运行环境。使用事件驱动,非阻塞io模型,轻量且高效。此外node.js的包管理系统npm是世界上所有开源库中最庞大的。
简单示例
定义文件一hello.js
var pi=Math.PI;exports.area=function(r){ return pi*r*r;}
定义文件二cal.js
var circle=require('./hello.js');console.log('area:'+circle.area(4));
cmd运行node cal.js 输出 area:50.2654....69
hello.js编译后源文件(function(exports,require,module,__filename,__dirname){var pi=Math.PI;exports.area=function(r){ return pi*r*r;}});
require('./hello.js')返回hello中的exports对象,所以自定义模块方法必须绑定到export中,才能被调用。 下面代码在创建自定义js类库underscore.js时考虑了前后端调用多种情况。
(function(){ //window对象 var root=this; //定义封装对象—— var _=function(obj){ return new wrapper(obj); }; //用于后端node调用 if(typeof exports!="undefined"){ if(typeof module!="undefined"&&module.exports){ exports=module.exports=_; } exports._=_; //用于前端requireJs调用 }else if(typeof define === 'function'&&define.amd){ define('underscore',function(){ return _; }); //前端window直接绑定 }else{ root['_']=_; }}).call(this);
Event事件
Node中的许多核心API建立在傻瓜式的异步事件驱动架构基础上,特定类型的对象(称作'emitters')发出事件注册,当事件触发时,调用对应注册的回调函数。 所有发出注册事件的对象都是EventEmitter类的实例。这些对象暴露eventEmitter.on()方法来注册一个或多个函数。
const myEmitter = new MyEmitter();//注册事件myEmitter.on('event', (a, b) => { console.log(a, b, this);});//触发事件myEmitter.emit('event', 'a', 'b');输出:a b {}
EventListener按照事件注册的顺序调用所用监听对象 error处理
const myEmitter = new MyEmitter();myEmitter.on('error', (err) => { console.log('whoops! there was an error');});myEmitter.emit('error', new Error('whoops!'));// Prints: whoops! there was an error
此外需要注意的是单个event默认最多可以注册10个事件。EventEmitter.defaultMaxListeners对于全部EventEmitter实例都起作用。使用emitter.setMaxListeners()可以设置单个event的注册事件数量,并避免trace warning。
Node应用场景:
- --使用非关系型数据库的web应用
- --I/O密集型系统,非CPU密级型
- --非关系型数据库 如Mongodb
- --RealTime应用,如chat room
- --数据流 (Data Streaming)
- --Proxy (代理)
- --数据操作实时要求不高的场景,如日志系统
MEAN STACK
安装Mongodb,指定dbpath和logpath 启动一个server,只需要mongod --dbpath "D:\mongodb\db" 即可。但是cmd关闭后,会关闭。
开启windows服务 mongodb安装目录下 新建config.cfg
systemLog: destination: file path: D:\mongodb\log\mongod.logstorage: dbPath: D:\mongodb\db
mongod --config "C:\Program Files\MongoDB\Server\3.4\mongod.cfg" --install
net start MongoDB
启动shell client
mongo
npm包版本查询
npm show packabeName@* version
npm模块安装devDepenendencies 依赖
npm install --save-dev
NodeJs开发环境配置
参考资料:
- 《nodejs深入浅出》