为啥 bodyParser 返回未定义?

Posted

技术标签:

【中文标题】为啥 bodyParser 返回未定义?【英文标题】:Why bodyParser returns undefined?为什么 bodyParser 返回未定义? 【发布时间】:2019-08-21 14:33:29 【问题描述】:

我无法获取 POST http://127.0.0.1:3001/users?name=Slava 的请求正文。

服务器响应“需要名称”。方法 getUsers 工作正常。 RethinkDB 运行良好,server.js 也运行良好。我在这里搜索了类似的答案,但没有合适的答案。有很老的答案,但它们并不相关。

这是请求:http://127.0.0.1:3001/users?name=bob(我使用 Postman 进行 POST)

为什么 bodyParser 在我的代码中不起作用?我不知道为什么会这样。

const Koa = require('koa')
const logger = require('koa-morgan')
const bodyParser = require('koa-bodyparser')
const Router = require('koa-router')
const r = require('rethinkdb')

const server = new Koa()
const router = new Router()

const db = async() => 
    const connection = await r.connect(
        host: 'localhost',
        port: '28015',
        db: 'getteamDB'
    )
    return connection;


server.use(bodyParser());

const insertUser = async(ctx, next) => 
    await next()
    // Get the db connection.
    const connection = await db()

    // Throw the error if the table does not exist.
    var exists = await r.tableList().contains('users').run(connection)
    if (exists === false) 
      ctx.throw(500, 'users table does not exist')
    

    let body = ctx.request.body || 

    console.log(body);

    // Throw the error if no name.
    if (body.name === undefined) 
      ctx.throw(400, 'name is required')
    

    // Throw the error if no email.
    if (body.email === undefined) 
      ctx.throw(400, 'email is required')
    

    let document = 
      name: body.name,
      email: body.email
    

    var result = await r.table('users')
      .insert(document, returnChanges: true)
      .run(connection)

    ctx.body = result
  

router
.post('/users', insertUser)

server
.use(router.routes())
.use(router.allowedMethods())
.use(logger('tiny')).listen(3001)

【问题讨论】:

请仅显示代码的必要部分。您是否需要访问查询参数或正文? 【参考方案1】:

正文解析器用于解析 POST 请求(用于 POST 正文),这里你必须使用 req.query 而不是 req.body,跟进 this 问题。

【讨论】:

以上是关于为啥 bodyParser 返回未定义?的主要内容,如果未能解决你的问题,请参考以下文章

即使值存在,为啥对象键返回未定义

为啥运行时返回未定义? [复制]

为啥 map() 返回一个未定义值的数组?

如果未返回,reduce 函数的累加器未定义。为啥它会这样?

为啥我的 .parentNode 返回未定义? [复制]

为啥 find() 返回未定义?