検索

ホームページ  >  に質問  >  本文

node.js - 关于koa2 的ctx.body是什么?

const Koa = require('koa');
const app = new Koa();

app.use(ctx => {
  ctx.body = 'Hello Koa in app-async.js';
  console.log(ctx)
});

app.listen(3000);

ctx是上下文的意思,但它究竟是什么呢?为了试图搞明白,用console.log将它输出,但是返回的内容里并没有ctx或content之类的东西。

{ request:
   { method: 'GET',
     url: '/',
     header:
      { host: 'localhost:3000',
        connection: 'keep-alive',
        'cache-control': 'max-age=0',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
        accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'accept-encoding': 'gzip, deflate, sdch, br',
        'accept-language': 'zh-CN,zh;q=0.8' } },
  response:
   { status: 200,
     message: 'OK',
     header:
      { 'content-type': 'text/plain; charset=utf-8',
        'content-length': '25' } },
  app: { subdomainOffset: 2, proxy: false, env: 'development' },
  originalUrl: '/',
  req: '<original node req>',
  res: '<original node res>',
  socket: '<original node socket>' 
}

ctx是什么?
ctx.body又是什么?为什么是body?我试过写成ctx.head,会报错~
如果换成ctx.response.body这样写,输出结果貌似是一样的,它们两个是等价的吗?

谢谢~

PHPzPHPz2777日前1364

全員に返信(3)返信します

  • 天蓬老师

    天蓬老师2017-04-17 16:03:24

    ctx は中国語で context の略称であり、一般にコンテキストと呼ばれます。この名詞は上位 (リクエスト) と下位 (レスポンス) の間の通信環境として理解できます。そのため、Koa は両方をカプセル化します。それらを ctx.Object に変換する場合、koa 公式ドキュメントの説明は、Linux システムのソフト接続と同様に、ctx.req=ctx.request、ctx.res=ctx.response を呼び出すためのものです。最終的な実行は依然としてリクエストとレスポンスのオブジェクトです

    それでは 2 番目の質問です。
    body は http プロトコルの応答本文であり、header は応答ヘッダーを指します
    ctx.body = ctx.res.body = ctx.response.body

    詳細については、github の公式ドキュメントを参照してください
    https://github.com/koajs/koa/...

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 16:03:24

    https://github.com/koajs/koa/...

    ctx.body は ctx.response.body の単なるエイリアスです。

    応答エイリアス

    • ctx.body

    • ctx.body=

    • ctx.status

    • ctx.status=

    • ctx.message

    • ctx.message=

    • ctx.length=

    • ctx.length

    • ctx.type=

    • ctx.type

    • ctx.headerSent

    • ctx.redirect()

    • ctx.attachment()

    • ctx.set()

    • ctx.append()

    • ctx.remove()

    • ctx.lastModified=

    • ctx.etag=

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 16:03:24

    これは、HTTP ライフ サイクルに焦点を当てた Web フレームワークです。つまり、CTX は、リクエストの同意から応答の終了までの HTTP ライフ サイクルのコンテキストを指します。

    返事
    0
  • キャンセル返事