当前位置: 首页 > 知识库问答 >
问题:

Catch-express-bodyParser错误

单于翰飞
2023-03-14

当我发送一个json对象时,我想捕获来自body Parser()中间件的错误,它是无效的,因为我想发送一个自定义响应,而不是一个通用的400错误。

这就是我所拥有的,它起作用了:

app.use (express.bodyParser ());
app.use (function (error, req, res, next){
    //Catch bodyParser error
    if (error.message === "invalid json"){
        sendError (res, myCustomErrorMessage);
    }else{
        next ();
    }
});

但在我看来,这是一种非常丑陋的方法,因为我正在比较可能在未来的express版本中更改的错误消息。有没有其他方法可以捕获bodyParser()错误?

编辑:

这是请求正文包含无效json时的错误:

{
  stack: 'Error: invalid json\n    at Object.exports.error (<path>/node_modules/express/node_modules/connect/lib/utils.js:55:13)\n    at IncomingMessage.<anonymous> (<path>/node_modules/express/node_modules/connect/lib/middleware/json.js:74:71)\n    at IncomingMessage.EventEmitter.emit (events.js:92:17)\n    at _stream_readable.js:872:14\n    at process._tickDomainCallback (node.js:459:13)',
  arguments: undefined,
  type: undefined,
  message: 'invalid json',
  status: 400
}

漂亮的打印堆栈:

Error: invalid json
    at Object.exports.error (<path>/node_modules/express/node_modules/connect/lib/utils.js:55:13)
    at IncomingMessage.<anonymous> (<path>/node_modules/express/node_modules/connect/lib/middleware/json.js:74:71)
    at IncomingMessage.EventEmitter.emit (events.js:92:17)
    at _stream_readable.js:872:14
    at process._tickDomainCallback (node.js:459:13)

共有3个答案

安博文
2023-03-14

好的,找到了:

bodyParser()是json()、urlencoded()和multipart()的方便函数。我只需要调用json(),捕捉错误并调用urlencoded()和multipart()。

身体解析器源

app.use (express.json ());
app.use (function (error, req, res, next){
    //Catch json error
    sendError (res, myCustomErrorMessage);
});

app.use (express.urlencoded ());
app.use (express.multipart ());
颜阳炎
2023-03-14

来自@alexander的答案,但有一个用法示例

app.use((req, res, next) => {
    bodyParser.json({
        verify: addRawBody,
    })(req, res, (err) => {
        if (err) {
            console.log(err);
            res.sendStatus(400);
            return;
        }
        next();
    });
});

function addRawBody(req, res, buf, encoding) {
    req.rawBody = buf.toString();
}
柯瀚玥
2023-03-14

我认为最好的办法是检查是否存在语法错误:

app.use(function (error, req, res, next) {
  if (error instanceof SyntaxError) {
    sendError(res, myCustomErrorMessage);
  } else {
    next();
  }
});
 类似资料:
  • 问题内容: 我正在使用Express 4.0,并且我知道主体解析器已从Express核心中移除,我使用的是推荐的替代品,但是我得到了 我在哪里可以找到这个所谓的中间件?还是我不应该得到这个错误? 问题答案: 这意味着自2014年6月19日起,不赞成使用 构造函数 。 您现在需要分别调用方法 等等。 如果仍然收到警告,则需要使用 在现在的配置对象的关键需要明确的被传递,因为它现在已经没有默认值。 如

  • 我使用的是Express4.0并且我知道body parser已经从express内核中删除了,我使用的是推荐的替换,但我得到的却是 我在哪里可以找到这些所谓的中间件?或者我不应该得到这个错误?

  • 本文向大家介绍express的中间件bodyParser详解,包括了express的中间件bodyParser详解的使用技巧和注意事项,需要的朋友参考一下 bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理. 下面是一个文件上传的例子. 建立一个1.html页面 上面的XMLHttpRequest对象与FormData对象时HT

  • 我需要创建一个web服务,并且我正在服务器中使用node.js。但当我在localhost中运行时,我会得到一个错误: 错误:大多数中间件(像bodyParser)不再与Express捆绑,必须单独安装。请参阅https://github.com/senchalabs/connect#中间件。

  • 问题内容: 我需要创建一个Web服务,并且正在服务器中使用Node.js。但是当我在本地主机上运行时,出现错误: 错误:大多数中间件(如bodyParser)不再与Express捆绑在一起,必须单独安装。请参阅https://github.com/senchalabs/connect#middleware。 neo4jtest.js 以下是我从控制台收到的错误: 问题答案: 您需要替换旧的捆绑中间

  • 问题内容: 看来这应该是一个相当简单的问题,但是我很难确定如何解决它。 我正在使用Node.js + Express构建一个Web应用程序,并且发现表达暴露的connect BodyParser在大多数情况下非常有用。但是,我想对多部分表单数据POSTS进行更细粒度的访问- 我需要将输入流通过管道传输到另一台服务器,并且希望避免先下载整个文件。 但是,由于我使用的是Express BodyPars