首页 > 解决方案 > 在 expressjs 中记录传入请求

问题描述

我期待我的 expressjs api 中有一个 json。但是当我收到请求时出现以下错误

SyntaxError: Unexpected token ' in JSON at position 2
    at JSON.parse (<anonymous>)
    at parse (/home/admin/middleware-2.0/node_modules/body-parser/lib/types/json.js:89:19)
    at /home/admin/middleware-2.0/node_modules/body-parser/lib/read.js:121:18
    at invokeCallback (/home/admin/middleware-2.0/node_modules/raw-body/index.js:224:16)
    at done (/home/admin/middleware-2.0/node_modules/raw-body/index.js:213:7)
    at IncomingMessage.onEnd (/home/admin/middleware-2.0/node_modules/raw-body/index.js:273:7)
    at IncomingMessage.emit (events.js:388:22)
    at endReadableNT (internal/streams/readable.js:1336:12)
    at processTicksAndRejections (internal/process/task_queues.js:82:21)

是的,我确定请求格式不是 json,但我们无法登录以检查请求。我们无权访问源应用程序代码以在源代码级别进行验证。我怎么能在我的api中做到这一点。

下面是快递代码

const express = require('express')
const app = express();

app.post('/n2/offline', (req, res) => {
    console.log('req before', req.body)
    res.status(200).send();
} )

const port = 3001

app.use(express.json());

app.listen(port, () => {
    console.log(`Message Receiver accepting requests on port ${port}`)
})

标签: node.jsexpress

解决方案


您可以编写一个错误处理中间件来捕获控制台中的错误。

app.use((err, req, res, next) => {
  console.error(err);
  if (err.status === 400) {
    return res.status(err.status).send("Invalid JSON");
  }
  return next(err);
});

来源: 如何使用 Express 或 Body-Parser 拒绝无效的 JSON 正文


推荐阅读