如何阻止节点js服务器崩溃

时间:2013-01-13 17:21:27

标签: javascript node.js webserver

我是节点js的新手。我试图创建一个简单的HTTP服务器。我按照着名的例子创建了一个'Hello World!'服务器如下。

var handleRequest = function(req, res) {
  res.writeHead(200);
  res1.end('Hello, World!\n');
};

require('http').createServer(handleRequest).listen(8080);

console.log('Server started on port 8080');

运行此代码将按预期正确启动服务器。但是尝试访问http://127.0.0.1:8080会导致错误,因为它会抛出res1未定义的错误。我希望服务器仍然可以继续运行,并在遇到错误时正常报告错误。

我如何实现它?我尝试过try-catch,但这对我没有帮助:(

3 个答案:

答案 0 :(得分:6)

这里有很多评论。首先,为了使您的示例服务器正常工作,需要在使用之前定义handleRequest。

1-可以通过处理uncaughtException(documentation)事件来处理实际需要的,阻止进程退出的内容:

var handleRequest = function(req, res) {
    res.writeHead(200);
    res1.end('Hello, World!\n');
};
var server = require('http').createServer(handleRequest);
process.on('uncaughtException', function(ex) {
    // do something with exception
});
server.listen(8080);
console.log('Server started on port 8080');

2-我建议在代码中使用try {} catch(e){},例如:

var handleRequest = function(req, res) {
    try {
      res.writeHead(200);
      res1.end('Hello, World!\n');
    } catch(e) {
      res.writeHead(200);
      res.end('Boo');
    }
};

3-我猜这个例子只是一个例子而不是实际的代码,这是一个可以防止的解析错误。我提到这一点,因为你需要在异常捕获处理程序上没有解析错误。

4-请注意,将来domain将替换节点process

5-我宁愿使用类似express的框架,而不是这样做。

6-推荐讲座:StackOverflow - NodeJS best practice for exception handling

答案 1 :(得分:1)

我不是针对您的问题详细信息,而是针对阻止节点服务器崩溃的问题标题。您可以使用 DOMAIN ,这可能会在抛出uncaughtException时阻止服务器崩溃。

domain = require('domain'),
d = domain.create();

d.on('error', function(err) {
  console.error(err);
});

有关详细信息,请转到http://shapeshed.com/uncaught-exceptions-in-node/

除了使用此方法之外,必须尝试捕获您的块。

答案 2 :(得分:0)

也许您应该在使用之前定义handleRequest

require('http').createServer(handleRequest).listen(8080);

function handleRequest(req, res) {
  res.writeHead(200);
  res1.end('Hello, World!\n');
};

var handleRequest = function(req, res) {
  res.writeHead(200);
  res1.end('Hello, World!\n');
};

require('http').createServer(handleRequest).listen(8080);

你应该确定res1也存在。