赞
踩
有什么问题可以加微信问吧 cannywill ,尽量帮助, 一起进步
当然Nodejs也有一些缺点:
错误优先(Error-first)的回调函数(Error-First Callback)用于同时返回错误和数据。第一个参数返回错误,并且验证它是否出错;其他参数返回数据。
- fs.readFile(filePath, function(err, data)
-
- {
-
- if (err)
-
- {
-
- // 处理错误
-
- return console.log(err);
-
- }
-
- console.log(data);
-
- });
以下方式避免回调地狱
Promise可以帮助我们更好地处理异步操作。下面的实例中,100ms后会打印result字符串。catch用于错误处理。多个Promise可以链接起来。
- new Promise((resolve, reject) =>
-
- {
-
- setTimeout(() =>
-
- {
-
- resolve('result');
-
- }, 100)
-
- })
-
- .then(console.log)
-
- .catch(console.error);
stub用于模块的行为。测试时,stub可以为函数调用返回模拟的结果。比如说,我们写文件时,实际上并不需要真正去写。
- var fs = require('fs');
- var writeFileStub = sinon.stub(fs, 'writeFile', function(path, data, cb)
-
- {
-
- return cb(null);
-
- });
-
- expect(writeFileStub).to.be.called;
-
- writeFileStub.restore();
测试金字塔反应了需要写的单元测试,集成测试以及端到端测试的比例:
少量端到端测试,去调用真正地接口(依赖不能stub)
目前,如果你一定要让你的应用80端口的话,你可以有通过在Node应用的前方再添加一层反向代理(例如nginx)来实现,如下图。否则,建议你直接监听大于1024的端口
方向代理指的是以代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器, 并且将服务器返回的结果发送给客户端。
Node采用的是单线程的处理机制(所有的I/O请求都采用非阻塞的工作方式),至少从Node.js开发者的角度是这样的。而在底层,Node.js借助libuv来作为抽象封装层,从而屏蔽不同操作系统的差异,Node可以借助livuv来实现线程。下图表示Node和libuv的关系
Libuv库负责Node API的执行。它将不同的任务分配给不同的线程,形成一个事件循环,以异步的方式将任务的执行结果返回给V8引擎。可以简单用下面这张图来表示
每一个I/O都需要一个回调函数————一旦执行完便堆到事件循环上用于执行
package.json
文件来管理项目信息,配置脚本,以及指明依赖的具体版本举个例子,在一个读取文件的场景中,当你不想读取一个真正的文件时:
var fs = require('fs'); var readFileStub = sinon.stub(fs, 'readFile', function (path, cb) { return cb(null, 'filecontent'); }); expect(readFileStub).to.be.called; readFileStub.restore();
在单元测试中:Stub是完全模拟一个外部依赖,而Mock常用来判断测试通过还是失败
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。