标签:
原文: https://blog.risingstack.com/node-js-best-practices/
模块应该暴露一个error-first的callback
例如:
module.exports = function (dragonName, callback) { // do some stuff here var dragon = createDragon(dragonName); // note, that the first parameter is the error // which is null here // but if an error occurs, then a new Error // should be passed here return callback(null, dragon); }
为了更好的理解为什么要这么做,让我们先来看一段有问题的代码,然后再来修复它.
// this example is **BROKEN**, we will fix it soon :) var fs = require(‘fs‘); function readJSON(filePath, callback) { fs.readFile(filePath, function(err, data) { callback(JSON.parse(data)); }); } readJSON(‘./package.json‘, function (err, pkg) { ... }
问题是readJSON
函数, 如果执行过程中出现Error,从来没有检查这个错误. 你应该去检查是否出错.
让我们来做些修改:
// 这个例子还是有问题的,我们下面回去修复 function readJSON(filePath, callback) { fs.readFile(filePath, function(err, data) { // here we check, if an error happened if (err) { // yep, pass the error to the callback // remember: error-first callbacks callback(err); } // no error, pass a null and the JSON callback(null, JSON.parse(data)); }); }
上面的例子还是有问题, 如果一个错误发生,执行还是会继续下去. 要记住一个原则,总是在callback中返回.
// this example is **STILL BROKEN**, we are fixing it! function readJSON(filePath, callback) { fs.readFile(filePath, function(err, data) { if (err) { return callback(err); } return callback(null, JSON.parse(data)); }); }
JSON.parse可能会抛出一个异常, 如果它解析的是一个非法的json字符串.
// this example **WORKS**! :) function readJSON(filePath, callback) { fs.readFile(filePath, function(err, data) { var parsedJson; // Handle error if (err) { return callback(err); } // Parse JSON try { parsedJson = JSON.parse(data); } catch (exception) { return callback(exception); } // Everything is ok return callback(null, parsedJson); }); }
this
和new
因为大量的回调嵌套,在Node上绑定一个特殊的上下文不是一个好的选择. 使用函数风格可以避免很多问题.
Use async.
Errors可以分为: operational errors 和 programmer errors.
Operational errors很难避免, 因为他不是bug, 而是系统或者远程服务的问题, 例如:
记住最重要的是: log everything.
Programmer errors是一些bug. 是你可以避免的, 例如:
立刻重启应用 supervisordor monit.
init
命令帮助我们创建应用的package.json
文件.
mkdir my-awesome-new-project cd my-awesome-new-project npm init
在你的package.json
文件中你可以在scripts section中设置你的脚本. 默认情况下, npm init会生成两个脚本
, start
和 test
. 你可以使用npm start
和 npm test 来运行这两段脚本
.
另外你可以在这自定义你的脚本, 可以使用 npm run-script <SCRIPT_NAME> 来运行你的自定义脚本
.
注意, NPM会设置$PATH来查找
node_modules/.bin中的可执行文件
. 这样避免全局安装NPM模块.
生产/开发环境中可能会设置不同的环境变量. 最通常的做法是通过设置 NODE_ENV
变量.
基于你的环境变量,加载你的配置文件 使用nconf.
标签:
原文地址:http://www.cnblogs.com/irocker/p/4679286.html