我是节点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,但这对我没有帮助:(
答案 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
也存在。