node.js - 我是否为nodejs正确设置了域?

标签 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'));
    });
});

当我在我的一个路由文件中创建错误时,它似乎可以正常工作,但错误没有记录。我应该让它记录到文件或其他东西,以便以后检查错误吗?

最佳答案

好吧,根据 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);
});

关于node.js - 我是否为nodejs正确设置了域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22793842/

相关文章:

javascript - meteor .js 错误 : Exception from sub xGHk6PkFTQ9uv8ncg TypeError: Cannot call method 'find' of undefined

php - Yii中的错误处理

c++ 在类之间传递对象

node.js - NodeJS : Promise won't catch thrown exceptions

node.js - 路线完成后重新调整 use()

javascript - 我如何在Mac中处理此文件上传错误?

javascript - 为什么 Node 无法解析这个文件名?

node.js - Node.js 的用法 - 它旨在提供一个斜坡的障碍是什么?

javascript - 从 MongoDB 中的对象字段中删除数组

node.js - socket.io服务器可以与非socket.io客户端通信吗