关于javascript:如何阻止节点js服务器崩溃

how to stop node js server from crashing

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

1
2
3
4
5
6
7
8
9
var handleRequest = function(req, res) {
  res.writeHead(200);
  res1.end('Hello, World!
'
);
};

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

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

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

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


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

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

1
2
3
4
5
6
7
8
9
10
11
var handleRequest = function(req, res) {
    res.writeHead(200);
    res1.end('Hello, World!
'
);
};
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){},例如:

1
2
3
4
5
6
7
8
9
10
var handleRequest = function(req, res) {
    try {
      res.writeHead(200);
      res1.end('Hello, World!
'
);
    } catch(e) {
      res.writeHead(200);
      res.end('Boo');
    }
};

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

4-请注意,将来将使用域替换节点process

5-我宁愿使用像express那样的框架,而不是做这些东西。

6-推荐讲座:StackOverflow - NodeJS异常处理的最佳实践


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

1
2
3
4
5
6
domain = require('domain'),
d = domain.create();

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

欲了解更多详情,请访问http://shapeshed.com/uncaught-exceptions-in-node/

除了使用这种方法,必须尝试抓住你的块。


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

1
2
3
4
5
6
7
require('http').createServer(handleRequest).listen(8080);

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

要么

1
2
3
4
5
6
7
var handleRequest = function(req, res) {
  res.writeHead(200);
  res1.end('Hello, World!
'
);
};

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

你应该确定res1也存在。