资讯专栏INFORMATION COLUMN

Koa v2.x 中文文档 响应(Response)

khlbat / 1525人阅读

摘要:每当流被设置为响应主体时,作为侦听器自动添加到事件中以捕获任何错误。不区分大小写获取响应标头字段值。例如这是一个中间件,可以削减除流之外的所有响应。检查是否已经发送了一个响应头。设置包含包裹的响应,请注意,没有相应的。

此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star.

响应(Response)

Koa Response 对象是在 node 的 vanilla 响应对象之上的抽象,提供了诸多对 HTTP 服务器开发有用的功能。

API response.header

响应标头对象。

response.headers

响应标头对象。别名是 response.header

response.socket

请求套接字。

response.status

获取响应状态。默认情况下,response.status 设置为 404 而不是像 node 的 res.statusCode 那样默认为 200

response.status=

通过数字代码设置响应状态:

100 "continue"

101 "switching protocols"

102 "processing"

200 "ok"

201 "created"

202 "accepted"

203 "non-authoritative information"

204 "no content"

205 "reset content"

206 "partial content"

207 "multi-status"

208 "already reported"

226 "im used"

300 "multiple choices"

301 "moved permanently"

302 "found"

303 "see other"

304 "not modified"

305 "use proxy"

307 "temporary redirect"

308 "permanent redirect"

400 "bad request"

401 "unauthorized"

402 "payment required"

403 "forbidden"

404 "not found"

405 "method not allowed"

406 "not acceptable"

407 "proxy authentication required"

408 "request timeout"

409 "conflict"

410 "gone"

411 "length required"

412 "precondition failed"

413 "payload too large"

414 "uri too long"

415 "unsupported media type"

416 "range not satisfiable"

417 "expectation failed"

418 "I"m a teapot"

422 "unprocessable entity"

423 "locked"

424 "failed dependency"

426 "upgrade required"

428 "precondition required"

429 "too many requests"

431 "request header fields too large"

500 "internal server error"

501 "not implemented"

502 "bad gateway"

503 "service unavailable"

504 "gateway timeout"

505 "http version not supported"

506 "variant also negotiates"

507 "insufficient storage"

508 "loop detected"

510 "not extended"

511 "network authentication required"

__注意__: 不用太在意记住这些字符串, 如果你写错了,可以查阅这个列表随时更正.

response.message

获取响应的状态消息. 默认情况下, response.messageresponse.status 关联.

response.message=

将响应的状态消息设置为给定值。

response.length=

将响应的 Content-Length 设置为给定值。

response.length

以数字返回响应的 Content-Length,或者从ctx.body推导出来,或者undefined

response.body

获取响应主体。

response.body=

将响应体设置为以下之一:

string 写入

Buffer 写入

Stream 管道

Object || Array JSON-字符串化

null 无内容响应

如果 response.status 未被设置, Koa 将会自动设置状态为 200204

String

Content-Type 默认为 text/htmltext/plain, 同时默认字符集是 utf-8。Content-Length 字段也是如此。

Buffer

Content-Type 默认为 application/octet-stream, 并且 Content-Length 字段也是如此。

Stream

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());
});
Object

Content-Type 默认为 application/json. 这包括普通的对象 { foo: "bar" } 和数组 ["foo", "bar"]

response.get(field)

不区分大小写获取响应标头字段值 field

const etag = ctx.response.get("ETag");
response.set(field, value)

设置响应标头 fieldvalue:

ctx.set("Cache-Control", "no-cache");
response.append(field, value)

用值 val 附加额外的标头 field

ctx.append("Link", "");
response.set(fields)

用一个对象设置多个响应标头fields:

ctx.set({
  "Etag": "1234",
  "Last-Modified": date
});
response.remove(field)

删除标头 field

response.type

获取响应 Content-Type 不含参数 "charset"。

const ct = ctx.type;
// => "image/png"
response.type=

设置响应 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") 将响应头字段设置为直接值。

response.is(types...)

非常类似 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);
});
response.redirect(url, [alt])

执行 [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";
response.attachment([filename])

Content-Disposition 设置为 “附件” 以指示客户端提示下载。(可选)指定下载的 filename

response.headerSent

检查是否已经发送了一个响应头。 用于查看客户端是否可能会收到错误通知。

response.lastModified

Last-Modified 标头返回为 Date, 如果存在。

response.lastModified=

Last-Modified 标头设置为适当的 UTC 字符串。您可以将其设置为 Date 或日期字符串。

ctx.response.lastModified = new Date();
response.etag=

设置包含 " 包裹的 ETag 响应,
请注意,没有相应的 response.etag getter。

ctx.response.etag = crypto.createHash("md5").update(ctx.body).digest("hex");
response.vary(field)

field 上变化。

response.flushHeaders()

刷新任何设置的标头,并开始主体。

如果这篇文章对您有帮助, 感谢 下方点赞 或 Star GitHub: koa-docs-Zh-CN 支持, 谢谢.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89474.html

相关文章

  • Koa v2.x 中文文档

    摘要:的对象提供了用于处理响应的方法,该响应委托给。应用对象是与的服务器和处理中间件注册的接口,从发送到中间件,默认错误处理,以及上下文,请求和响应对象的配置。 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. showImg(https://segmentfault.com/img/bVNQYf...

    Cobub 评论0 收藏0
  • Koa v2.x 中文文档 使用指南

    摘要:当中间件运行时,它必须手动调用来运行下游中间件。例如,这个中间件从读取文件名,然后在将给指定合并结果之前并行读取每个文件的内容。当你无法控制中间件的名称时,这很有用。 指南 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. 本指南涵盖的 Koa 主题不与 API 直接相关,例如编写中间件的最...

    anquan 评论0 收藏0
  • Koa v2.x 中文文档 上下文(Context)

    摘要:方法抛出一个属性默认为的错误,这将允许做出适当地响应。这用于修饰其人机友好型错误并向上游的请求者报告非常有用。请注意,不支持使用此功能。这可能会破坏中间件和本身的预期功能。 上下文(Context) 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Koa Context 将 node 的 ...

    Arno 评论0 收藏0
  • Koa v2.x 中文文档 API

    此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. 相关 API 上下文(Context) 请求(Request) 响应(Response) 安装 Koa 依赖 node v7.6.0 或 ES2015及更高版本和 async 方法支持. 你可以使用自己喜欢的版本管理器快速安装支持的 node 版本:...

    mikasa 评论0 收藏0
  • Koa v2.x 中文文档 常见问题

    摘要:常见问题此系列文章的应用示例已发布于可以帮助改进或关注更新欢迎替代它更像是,但是很多的好东西被转移到的中间件级别,以帮助形成更强大的基础。这使得中间件对于整个堆栈而言不仅仅是最终应用程序代码,而且更易于书写,并更不容易出错。 常见问题 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Koa...

    Paul_King 评论0 收藏0

发表评论

0条评论

khlbat

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<