码迷,mamicode.com
首页 > Web开发 > 详细

Node.js Best Practices

时间:2015-07-30 16:26:45      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

原文: https://blog.risingstack.com/node-js-best-practices/

 

Coding style

Callback约定

模块应该暴露一个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);
}

总是在callback里面检查error

为了更好的理解为什么要这么做,让我们先来看一段有问题的代码,然后再来修复它.

// 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));
  });
}

Return on callbacks

上面的例子还是有问题, 如果一个错误发生,执行还是会继续下去. 要记住一个原则,总是在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));
  });
}

只在同步代码中使用try-catch

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);
  });
}

避免使用thisnew

因为大量的回调嵌套,在Node上绑定一个特殊的上下文不是一个好的选择. 使用函数风格可以避免很多问题. 

使用好的异步模式

Use async.

错误处理

Errors可以分为: operational errors 和 programmer errors.

Operational errors

Operational errors很难避免, 因为他不是bug, 而是系统或者远程服务的问题, 例如:

  • 请求超时
  • 内存满了
  • 连接到远程服务失败
处理operational errors
  • 试着解决错误 - 如果一个文件不存在,你可以试着先去创建一个
  • 重试操作, 当处理网络通信的时候
  • 告诉客户有错误发生 - 当处理客户的非法输入的时候
  • Crash the process, when the error condition is unlikely to change on its own, like the application cannot read its configuration file

记住最重要的是: log everything.

Programmer errors

Programmer errors是一些bug. 是你可以避免的, 例如:

  • 调用一个没有callback的异步函数
  • 读取一个undefined的property
Handling programmer errors

立刻重启应用 supervisordor monit.

Workflow tips

使用npm init开始一个新项目

init 命令帮助我们创建应用的package.json 文件.

mkdir my-awesome-new-project  
cd my-awesome-new-project  
npm init  

指定一个star和test脚本

在你的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.

使用风格指南

见 Node.js style guide.

 

Node.js Best Practices

标签:

原文地址:http://www.cnblogs.com/irocker/p/4679286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!