Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Domain в node.js не ловит исключение от body-parser middleware. (https://javascript.ru/forum/node-js-io-js/58586-domain-v-node-js-ne-lovit-isklyuchenie-ot-body-parser-middleware.html)

frying 30.09.2015 09:20

Domain в node.js не ловит исключение от body-parser middleware.
 
Использую следующие вещи:
  • windows 7 x64
  • nodejs v. 0.12.2
  • express v. 4.12.3
  • body-parser v. 1.14.1

Обернул код сервера в модуль domain, но когда я хочу отослать body в некорректной форме, то получаю исключение. Странность в том, что модуль domain не отлавливает это исключение, и я получаю его как есть.
Почему такое происходит? Как можно сделать так, чтобы domain отлавливал и ошибки от модуля.

Пример кода:

var domain = require('domain');

var d = domain.create();
d.on('error', function(err) {
    console.log(err.stack);
    console.log("Something is bad");
});

d.run(function() {
    var express = require('express');
    var bodyParser = require('body-parser');

    var app = express();
    app.use(bodyParser.json());
    app.post('/', function(req, res) {
        res.status(200).send('hello world');
    });
    app.listen(3000);
});


Пример передачи на сервер невалидного body:
curl -XPOST 'http://localhost:3000/' -d '{\"foo\": \"bar\"' -H "Content-Type:application/json" -v


Получаемая ошибка:
SyntaxError: Unexpected token \                                                                                         
at Object.parse (native)                                                                                            
at parse (C:\Users\User\Desktop\check\node_modules\body-parser\lib\types\json.js:88:17)                             
at C:\Users\User\Desktop\check\node_modules\body-parser\lib\read.js:116:18                                          
at invokeCallback (C:\Users\User\Desktop\check\node_modules\body-parser\node_modules\raw-body\index.js:262:16)      
at done (C:\Users\User\Desktop\check\node_modules\body-parser\node_modules\raw-body\index.js:251:7)                 
at IncomingMessage.onEnd (C:\Users\User\Desktop\check\node_modules\body-parser\node_modules\raw-body\index.js:308:7)
at IncomingMessage.emit (events.js:104:17)                                                                          
at _stream_readable.js:908:16                                                                                       
at process._tickDomainCallback (node.js:381:11)


Часовой пояс GMT +3, время: 16:28.