标签:
原文: 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