【问题标题】:how to handle body-parser errors in express nodejs如何处理express nodejs中的body-parser错误
【发布时间】:2015-02-15 17:29:35
【问题描述】:

我正在使用以下数据访问 Node 上的 Web 服务,

我的请求数据是:

{
"first_name":"surinder",,
"last_name":"rawat",
"email":"surinder.rawat@testcompany.com",
"phone":"1234567890",
"password":"surinder",
"user_type":"H",
"device_type":"A"
}

并出现以下错误:

Connect
400 SyntaxError: Unexpected token ,
   at Object.parse (native)
   at parse (/home/surinder/workspace/HappyHakka/node_modules/body-parser/lib/typs
   /json.js:76:17)
   at /home/surinder/workspace/HappyHakka/node_modules/body-parser/lib/read.js:98:18
   at IncomingMessage.onEnd (/home/surinder/workspace/HappyHakka/node_modules/body-parser
   /node_modules/raw-body/index.js:136:7)
   at IncomingMessage.g (events.js:180:16)
   at IncomingMessage.emit (events.js:92:17)
   at _stream_readable.js:943:16
   at process._tickCallback (node.js:419:13)

我故意使用双逗号来得到这个错误。我想知道如何处理此错误并以正确的格式向用户显示错误

谢谢

【问题讨论】:

  • 中间件堆栈中的最后一个回调应该是您的错误处理程序,它将捕获这些错误。 Docs
  • 感谢工作。对于那些没有得到它的人。在app.use(bodyParser());之后使用app.use(function(err, req, res, next){ // logic });
  • 你可以让它成为一个答案
  • "first_name":"surinder",, - 为什么是两个逗号?

标签: node.js error-handling body-parser


【解决方案1】:

它与 body-parserraw-body 包有关 如果您想以更强大的方式解决此问题并处理从正文解析器抛出的所有错误,请使用此中间件

https://github.com/ntedgi/express-body-parser-error-handler

$ npm i express-body-parser-error-handler

它将处理例如从 body-parser 抛出的所有常见错误

'encoding.unsupported'、'entity.parse.failed'、'entity.verify.failed'、'request.aborted'、'request.size.invalid'、'stream.encoding.set'、'参数。 too.many'、'charset.unsupported'、'encoding.unsupported'、'entity.too.large'

用法示例:

const bodyParserErrorHandler = require('express-body-parser-error-handler')
const { urlencoded, json } = require('body-parser')
const express = require('express')
const app = express();
router.route('/').get(function (req, res) {
    return res.json({message:"?"});
});

// body parser initilization
app.use(urlencoded({extended: false, limit: defaultLimitSize}));
app.use('/', json({limit: '250'}));

// body parser error handler
app.use(bodyParserErrorHandler());
app.use(router);
...

【讨论】:

    【解决方案2】:

    来自Docs -

    在其他 app.use() 和路由调用之后,您最后定义错误处理中间件;例如:

    var bodyParser = require('body-parser');
    var methodOverride = require('method-override');
    
    app.use(bodyParser.urlencoded({
        extended: true
    }));
    app.use(bodyParser.json());
    app.use(methodOverride());
    app.use(function(err, req, res, next) {
    
      // error handling logic
      console.error(err.stack);
      res.status(500).send('Something broke!');
    
    });
    

    【讨论】:

    • 我建议在bodyParser 之后的路由器中间件链中放置一个更具体的错误处理程序,以专门处理此时发生的错误。同时将更通用的错误处理中间件留在链中。
    猜你喜欢
    • 2021-02-19
    • 2016-07-25
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    相关资源
    最近更新 更多