此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 能够 Fork 帮助改进或 Star 关注更新. 欢迎 Star.html
Koa Response
对象是在 node 的 vanilla 响应对象之上的抽象,提供了诸多对 HTTP 服务器开发有用的功能。node
响应标头对象。git
响应标头对象。别名是 response.header
。github
请求套接字。json
获取响应状态。默认状况下,response.status
设置为 404
而不是像 node 的 res.statusCode
那样默认为 200
。数组
经过数字代码设置响应状态:服务器
__注意__: 不用太在乎记住这些字符串, 若是你写错了,能够查阅这个列表随时更正.app
获取响应的状态消息. 默认状况下, response.message
与 response.status
关联.koa
将响应的状态消息设置为给定值。socket
将响应的 Content-Length 设置为给定值。
以数字返回响应的 Content-Length,或者从ctx.body
推导出来,或者undefined
。
获取响应主体。
将响应体设置为如下之一:
string
写入Buffer
写入Stream
管道Object
|| Array
JSON-字符串化null
无内容响应若是 response.status
未被设置, Koa 将会自动设置状态为 200
或 204
。
Content-Type 默认为 text/html
或 text/plain
, 同时默认字符集是 utf-8。Content-Length 字段也是如此。
Content-Type 默认为 application/octet-stream
, 而且 Content-Length 字段也是如此。
Content-Type 默认为 application/octet-stream
。
每当流被设置为响应主体时,.onerror
做为侦听器自动添加到 error
事件中以捕获任何错误。此外,每当请求关闭(甚至过早)时,流都将被销毁。若是你不想要这两个功能,请勿直接将流设为主体。例如,当将主体设置为代理中的 HTTP 流时,你可能不想要这样作,由于它会破坏底层链接。
参阅: https://github.com/koajs/koa/... 获取更多信息。
如下是流错误处理的示例,而不会自动破坏流:
const PassThrough = require('stream').PassThrough; app.use(async ctx => { ctx.body = someHTTPStream.on('error', ctx.onerror).pipe(PassThrough()); });
Content-Type 默认为 application/json
. 这包括普通的对象 { foo: 'bar' }
和数组 ['foo', 'bar']
。
不区分大小写获取响应标头字段值 field
。
const etag = ctx.response.get('ETag');
设置响应标头 field
到 value
:
ctx.set('Cache-Control', 'no-cache');
用值 val
附加额外的标头 field
。
ctx.append('Link', '<http://127.0.0.1/>');
用一个对象设置多个响应标头fields
:
ctx.set({ 'Etag': '1234', 'Last-Modified': date });
删除标头 field
。
获取响应 Content-Type
不含参数 "charset"。
const ct = ctx.type; // => "image/png"
设置响应 Content-Type
经过 mime 字符串或文件扩展名。
ctx.type = 'text/plain; charset=utf-8'; ctx.type = 'image/png'; ctx.type = '.png'; ctx.type = 'png';
注意: 在适当的状况下为你选择 charset
, 好比 response.type = 'html'
将默认是 "utf-8". 若是你想覆盖 charset
, 使用 ctx.set('Content-Type', 'text/html')
将响应头字段设置为直接值。
很是相似 ctx.request.is()
. 检查响应类型是不是所提供的类型之一。这对于建立操纵响应的中间件特别有用。
例如, 这是一个中间件,能够削减除流以外的全部HTML响应。
const minify = require('html-minifier'); app.use(async (ctx, next) => { await next(); if (!ctx.response.is('html')) return; let body = ctx.body; if (!body || body.pipe) return; if (Buffer.isBuffer(body)) body = body.toString(); ctx.body = minify(body); });
执行 [302] 重定向到 url
.
字符串 “back” 是特别提供Referrer支持的,当Referrer不存在时,使用 alt
或“/”。
ctx.redirect('back'); ctx.redirect('back', '/index.html'); ctx.redirect('/login'); ctx.redirect('http://google.com');
要更改 “302” 的默认状态,只需在该调用以前或以后分配状态。要变动主体请在此调用以后:
ctx.status = 301; ctx.redirect('/cart'); ctx.body = 'Redirecting to shopping cart';
将 Content-Disposition
设置为 “附件” 以指示客户端提示下载。(可选)指定下载的 filename
。
检查是否已经发送了一个响应头。 用于查看客户端是否可能会收到错误通知。
将 Last-Modified
标头返回为 Date
, 若是存在。
将 Last-Modified
标头设置为适当的 UTC 字符串。您能够将其设置为 Date
或日期字符串。
ctx.response.lastModified = new Date();
设置包含 "
包裹的 ETag 响应,
请注意,没有相应的 response.etag
getter。
ctx.response.etag = crypto.createHash('md5').update(ctx.body).digest('hex');
在 field
上变化。
刷新任何设置的标头,并开始主体。
若是这篇文章对您有帮助, 感谢 下方点赞 或 Star GitHub: koa-docs-Zh-CN 支持, 谢谢.