I wrote this simple server in node. Actually my goal is to better understand exception handling best practices in Node. So my question is more specific. Is this code bullet proof to exceptions? Are all errors or exceptions propertly handled? How would you make it more safe? Where would you put try/catch? Is there a place where try/catch is missing?
var http = require('http');
// Register handler for incoming requests.
var server = http.createServer(function(request, response) {
var body = "";
request.setEncoding("utf8");
request.on('error', function(err) {
console.error(err.stack);
});
// Listen for incoming data in the request.
request.on('data', function(chunk) {
body += chunk
});
// Has all data arrived?
request.on('end', function() {
// We should send response only when the whole request has been received, isn't it?
response.writeHead(200, {
'Content-Type': 'text/html',
'X-Powered-By': 'bacon'
});
response.on('error', function(err) {
console.error(err);
});
response.write('<html>');
response.write('<body>');
response.write('<h1>Hello, World!</h1>');
response.write('<p>');
response.write(body);
response.write('</p>');
response.write('</body>');
response.write('</html>');
response.end();
});
});
// Listen on some port
server.listen(8085);
1 Answer 1
If you're going to continue using raw, low level, http then you've done good enough (although you should probably return a 500 response code back to the client). In reality though, you're unlikely to continue working with Node at such a low level. Most Node applications are going to use a framework like Express, which has the concept of Middleware. Typically, you'd use some middleware to handle runtime errors.
-
\$\begingroup\$ thanks I started with node recently and I find a bit puzzling exception handling here due to fact of having async/sync code mixed and that for example throw/cathch isn't useful with async. So I am trying to see best practice to effectively handle all exceptions \$\endgroup\$user126614– user1266142017年02月05日 12:08:05 +00:00Commented Feb 5, 2017 at 12:08
-
1\$\begingroup\$ @user200400 you're going to want to learn about Promises then. They provide a very nice async error handling abstraction. \$\endgroup\$RubberDuck– RubberDuck2017年02月05日 12:38:17 +00:00Commented Feb 5, 2017 at 12:38
-
\$\begingroup\$ Thanks will definitely check it. But I read in docs sometimes even async function can throw exception...?! what you do in that case? \$\endgroup\$user126614– user1266142017年02月05日 12:53:12 +00:00Commented Feb 5, 2017 at 12:53
-
\$\begingroup\$ I think maybe you're a bit too worried atm. I'd recommend just building something useful and dealing with this scenarios as they arise. \$\endgroup\$RubberDuck– RubberDuck2017年02月05日 12:54:21 +00:00Commented Feb 5, 2017 at 12:54
-
\$\begingroup\$ final thing: does createServer throw? I couldn't find in doc \$\endgroup\$user126614– user1266142017年02月05日 17:25:17 +00:00Commented Feb 5, 2017 at 17:25