文档章节

Node全栈开发

无畏的老巨人
 无畏的老巨人
发布于 2017/02/09 14:38
字数 736
阅读 9
收藏 0

引用官方定义

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应用场景:

  1. --使用非关系型数据库的web应用
  2. --I/O密集型系统,非CPU密级型
  3. --非关系型数据库 如Mongodb
  4. --RealTime应用,如chat room
  5. --数据流 (Data Streaming)
  6. --Proxy (代理)
  7. --数据操作实时要求不高的场景,如日志系统

MEAN STACK

安装Mongodb,指定dbpath和logpath 启动一个server,只需要mongod --dbpath "D:\mongodb\db" 即可。但是cmd关闭后,会关闭。

开启windows服务 mongodb安装目录下 新建config.cfg

systemLog:
    destination: file
    path: D:\mongodb\log\mongod.log
storage:
    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开发环境配置

  1. http://www.w3cmark.com/2016/nodejs-build-system.html
  2. http://jingyan.baidu.com/article/b87fe19e9d7a9a52183568de.html

参考资料:

  1. https://nodejs.org/dist/latest-v6.x/docs/api
  2. 《nodejs深入浅出》
  3. https://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js
  4. http://www.sufalamtech.com/blog/when-should-you-use-node-js-details-of-node-js-with-usecases-explained/

© 著作权归作者所有

无畏的老巨人

无畏的老巨人

粉丝 17
博文 96
码字总数 99520
作品 0
宁波
CTO(技术副总裁)
私信 提问
【福利】3980元的web前端视频教程限量领取!!!

  2017年,互联网行业风起云涌,IT工程师如果仅凭传统开发思维,无法突破固有知识体系,终将会被社会所淘汰。会跨平台混合应用开发、微信小程序、Web应用、pc以及手机炫酷网页的HTML5全栈开...

Android群英传
2017/10/23
0
0
[投稿] 北京 招聘 node.js 全栈工程师

联系站长免费投稿发布招聘信息 职责 基于node.js 服务端开发 职位 node.js 全栈工程师 经验 2 年以上Server 开发 学历 大专以上 坐标 10号线地铁健德门站 要求 JavaScript 基本概念清晰 熟练...

一介布衣
2016/09/05
0
0
“全栈工程师”是怎样练成的?廖雪峰大牛的经验分享

80%的程序员们都遇到过这一问题:工作有几年的时间了,为什么自己技术水平提高缓慢,薪资也不如人意? 对于大多数人来说,问题的关键在于没有找到正确的发展方向去发力。 找到正确的发展方向...

技术小能手
2018/08/24
0
0
初涉全栈:Node+MySQL实现登录的简单功能

一、几种node的典型应用 自动化脚手架工具:vue-cli、webpack-cli和定制化脚手架工具开发。 中间层 保持前后端分离的前提下,使用node搭建Web Server简易服务器,用来做页面的服务端渲染和数...

小铭子
08/30
0
0
[淘宝玉伯]说说全栈工程师

全栈工程师(Full Stack Developer)好像突然就火了,知乎、微博上都有讨论。这个概念在 2012 年时就有提出:What is a Full Stack Developer?,主要观点是: 有这么一批人,他们对软件开发的...

邪云子
2014/01/21
2.7K
15

没有更多内容

加载失败,请刷新页面

加载更多

JS其他类型值转化为Boolean类型规则

本文转载于:专业的前端网站➤JS其他类型值转化为Boolean类型规则 由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化...

前端老手
13分钟前
2
0
EurekaClient自动装配及启动流程解析

在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类EurekaDiscoveryClie...

Java学习录
19分钟前
2
0
析构函数是否必须为虚函数?为何?

在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易造成...

天王盖地虎626
20分钟前
2
0
【TencentOS tiny】深度源码分析(7)——事件

引言 大家在裸机编程中很可能经常用到flag这种变量,用来标志一下某个事件的发生,然后在循环中判断这些标志是否发生,如果是等待多个事件的话,还可能会if((xxx_flag)&&(xxx_flag))这样子做...

杰杰1号
23分钟前
2
0
聊聊nacos client的ServerHttpAgent

序 本文主要研究一下nacos client的ServerHttpAgent HttpAgent nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/http/HttpAgent.java public interface HttpAgent { ......

go4it
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部