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

我是节点js的新手。 我正在尝试创build一个简单的HTTP服务器。 我跟着这个着名的例子创build了一个“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崩溃。 我希望服务器仍能继续运行,并在遇到错误时正常报告错误。

我如何实现它? 我试过试试看,但那不是帮助我:(

这里有一堆评论。 首先,为了让你的示例服务器工作,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-我会build议在你的代码中使用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'); } }; 

我猜这个例子只是一个例子而不是实际的代码,这是一个可以防止的parsing错误。 我提到这一点,因为你需要在Exception catch处理程序上没有parsing错误。

4-请注意,节点process将来将被域replace

我宁愿使用像expression这样的框架,而不是这样做。

6-推荐的讲座: StackOverflow – NodeJSexception处理的最佳实践

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

 domain = require('domain'), d = domain.create(); d.on('error', function(err) { console.error(err); }); 

有关更多详细信息,请访问http://shapeshed.com/uncaught-exceptions-in-node/

除了使用这个方法之外,还必须试着抓住你的块。

也许你应该在使用它之前定义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也存在。