#javascript #express #body-parser
#javascript #экспресс #body-синтаксический анализатор
Вопрос:
Каков наилучший способ перехватить недопустимый JSON здесь?
Когда я POST
{
"name": "rob
}
чтобы /user
я получал приведенную ниже трассировку стека, возвращенную в качестве ответа, как я могу перехватить это на всех конечных точках, чтобы предоставить более настраиваемую ошибку?
Предполагая, что a try .. catch
не подходит для всех маршрутов, есть ли более чистый способ?
app.js
app.route('/user/:id')
.get(function(req, res) {
user.get(req, res);
});
app.route('/user')
.post(bodyParser.json(), function(req, res) {
user.add(req, res);
});
app.route('/user')
.put(bodyParser.json(), function(req, res) {
user.update(req, res);
});
app.route('/post/:id')
.get(function(req, res) {
post.get(req, res);
});
Ошибка, возникающая при отправке недействительного JSON
..
SyntaxError: Unexpected string
Object.parse (native)
parse (/home/rob/git/project/service/node_modules/body-parser/lib/types/json.js:88:17)
/home/rob/git/project/service/node_modules/body-parser/lib/read.js:116:18
invokeCallback (/home/rob/git/project/service/node_modules/body-parser/node_modules/raw-body/index.js:262:16)
done (/home/rob/git/project/service/node_modules/body-parser/node_modules/raw-body/index.js:251:7)
IncomingMessage.onEnd (/home/rob/git/project/service/node_modules/body-parser/node_modules/raw-body/index.js:307:7)
IncomingMessage.amp;<anonymousamp;> (/home/rob/git/project/service/node_modules/dependency-project/node_modules/log4js-client/node_modules/request-context/node_modules/continuation-local-storage/context.js:84:17)
emitNone (events.js:67:13)
IncomingMessage.emit (events.js:166:7)
IncomingMessage.emitted [as emit] (/home/rob/git/project/service/node_modules/dependency-project/node_modules/log4js-client/node_modules/request-context/node_modules/continuation-local-storage/node_modules/emitter-listener/listener.js:122:21)
endReadableNT (_stream_readable.js:913:12)
/home/rob/git/project/service/node_modules/request-context/node_modules/continuation-local-storage/node_modules/async-listener/glue.js:188:31
nextTickCallbackWith2Args (node.js:442:9)
process._tickCallback (node.js:356:17)
Комментарии:
1. Почему бы не перехватить ошибку на стороне клиента?
2. это микросервис на основе REST, вызываемый другим микросервисом. Нет пользовательского интерфейса
3. github.com/expressjs/body-parser/blob/master/lib/types/json.js в 88-й строке функция JSON.parse используется только один раз в исходном скрипте. Может быть, поймать ошибку, которая решит проблему?