尝试使用未定义的Koa bodyparser和ctx.body

时间:2019-04-04 04:29:51

标签: javascript node.js koa

我正在尝试学习koa,但无法弄清楚为什么我会出错:

server error TypeError: ctx.body is not a function
    at getHandler (/Users/tomcaflisch/Sites/learn-koa/server.js:32:7)

当我运行这段代码时:

'use strict'

const Router = require('koa-router')
const bodyParser = require('koa-bodyparser')

function server (app) {
  const router = new Router()
  router.get('/foo', getHandler)
  app.use(bodyParser())
  app.use(router.routes())


  app.use(async (ctx, next) => {
    try {
      await next();
    } catch (err) {
      ctx.status = err.status || 500;
      ctx.body = err.message;
      ctx.app.emit('error', err, ctx);
    }
  });

  app.on('error', (err, ctx) => {
    console.log('server error', err, ctx)
  });

  app.listen(4000)
}

function getHandler (ctx, next) {
  // ctx.set('Location', 'http://localhost:3000/foo')
  ctx.body({ foo: 'bar' })
}

module.exports = server

3 个答案:

答案 0 :(得分:3)

问题的确切含义是:style="display: block; width:100%; text-align:center;"

从文档中

  

Koa响应对象是节点的普通响应对象之上的抽象

ctx.body is not a function

因此,Response aliases The following accessors and alias Response equivalents: ctx.body ctx.body= 本质上是一个对象,您为其分配要发送的内容作为响应。

如果您查看ctx.body示例,则响应只是分配给Hello World发送的Response对象。

koa

因此,将代码更改为以下代码将响应正文用作app.use(async ctx => { ctx.body = 'Hello World'; });

json

答案 1 :(得分:0)

您知道GET请求没有正文,只有POST请求吗?

答案 2 :(得分:0)

来自koajs/bodyparser文档

ctx.body不存在,它是ctx.request.body返回JSON对象(不是函数)