我想防止我的 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/