我是否正确为nodejs设置域名?

时间:2014-04-01 18:22:48

标签: node.js error-handling

我想阻止我的NodeJS应用程序崩溃,并且读取使用域是这样做的方法。我仍然有点困惑,但遵循我所看到的设置。这个设置正确吗?我需要改变什么吗?感谢。

var express = require('express');
var http = require('http');
var path = require('path');
var d = require('domain').create();

var app = express();

app.configure(function() {

    //set up express
    app.set('port', process.env.PORT || 3000);

    app.use(app.router);
    app.use(function(req,res){
        res.redirect('/error');
    });

});


//launch
d.on('error', function(er) {
    console.log('Error!', er.message);
});

d.run(function() {
    http.createServer(app).listen(app.get('port'), function(){
        console.log('Express server listening on port ' + app.get('port'));
    });
});

当我在其中一个路由文件中创建错误时,它似乎正常工作,但错误不是记录。我是否应该将其记录到文件或其他内容以便稍后检查错误?

1 个答案:

答案 0 :(得分:1)

根据NodeJS文档,您正在做的是一种不好的做法,因为每次发生错误时都可以启动内存泄漏。有domain api docs page正确方法的例子。我不确定为什么console.log不起作用,但是 - 日志文件可能是个好主意。另请注意,域的api仍然不稳定,可能会发生变化。

简而言之,您应该优雅地处理错误,并在发生意外错误时启动新的工作进程(使用群集模块启动和停止遇到问题的工作人员)。

从文档来看,这就是你应该做的事情,这看起来非常接近你正在做的事情:

// XXX WARNING!  BAD IDEA!

var d = require('domain').create();
d.on('error', function(er) {
  // The error won't crash the process, but what it does is worse!
  // Though we've prevented abrupt process restarting, we are leaking
  // resources like crazy if this ever happens.
  // This is no better than process.on('uncaughtException')!
  console.log('error, but oh well', er.message);
});
d.run(function() {
  require('http').createServer(function(req, res) {
    handleRequest(req, res);
  }).listen(PORT);
});