如何阻止节点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
也存在。