【问题标题】:log incoming request in expressjs在 expressjs 中记录传入请求
【发布时间】:2021-06-26 23:44:30
【问题描述】:

我期待我的 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}`)
})

【问题讨论】:

  • 您无法登录,因为请求在 post 功能之前失败,在日志之前。您有一个中间件 app.use(express.json()); 正在尝试将您的请求解析为 json。尝试删除它,然后检查您在请求中获得的格式

标签: node.js express


【解决方案1】:

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

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

来源: How do you reject an invalid JSON body using Express or Body-Parser

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多