postman Next.js API路由神秘地修改JSON负载

pkln4tw6  于 2022-11-07  发布在  Postman
关注(0)|答案(1)|浏览(158)

由于某种原因,当我通过Postman发送JSON格式的数据作为原始文本时,我没有遇到任何问题。当我通过Postman发送完全相同的数据作为原始JSON时(区别应该只是content-type头是application/json而不是application/text),我最终会去掉双引号,字符串切换为单引号。
原始有效负载示例( Postman发送this):

{ "id": "blahblahbloo", "time": "hammer" }

非预期的转换(NextJS接收this):

{ id: 'blahblahbloo', time: 'hammer' }

需要说明的是,当我通过Postman发送原始文本时,我得到的是完全相同的结果(这是我所期望的):

// Postman sends this and NextJs receives this when set to raw text    
{ "id": "blahblahbloo", "time": "hammer" }

我没有明确地执行任何操作来读取content-type和转换数据。https://nextjs.org/docs/api-routes/dynamic-api-routes

oknwwptz

oknwwptz1#

Next.js API路由有一个内置的bodyParser中间件,它将根据传入请求的Content-Type头解析请求的主体。
API Middlewares文档(重点是我的):
API路由提供了内置的中间件,用于解析传入的请求(req)。这些中间件包括:

  • req.cookies-包含请求发送的Cookie的对象。默认值为{}
  • req.query-包含查询字符串的对象。默认值为{}
    *req.body-包含由content-type分析的正文的对象,如果未发送正文,则为null

将有效负载作为application/json发送会让API路由将req.body转换为JavaScript对象,因此会去掉双引号。
虽然bodyParser中间件在默认情况下是自动启用的,但如果您想自己使用主体,可以禁用它。

// In the API route
export const config = {
    api: {
        bodyParser: false
    }
}

相关问题