ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 响应(Response) Koa `Response` 对象是对 node 的 response 进一步抽象和封装,提供了日常 HTTP 服务器开发中一些有用的功能。 ## API ### res.header Response header 对象。 ### res.socket Request socket。 ### res.status 获取 response status。不同于 node 在默认情况下 `res.statusCode` 为200,`res.status` 并没有赋值。 ### res.statusString Response status 字符串。 ### res.status= 通过 数字状态码或者不区分大小写的字符串来设置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" * 300 "multiple choices" * 301 "moved permanently" * 302 "moved temporarily" * 303 "see other" * 304 "not modified" * 305 "use proxy" * 307 "temporary 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 time-out" * 409 "conflict" * 410 "gone" * 411 "length required" * 412 "precondition failed" * 413 "request entity too large" * 414 "request-uri too large" * 415 "unsupported media type" * 416 "requested range not satisfiable" * 417 "expectation failed" * 418 "i'm a teapot" * 422 "unprocessable entity" * 423 "locked" * 424 "failed dependency" * 425 "unordered collection" * 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 time-out" * 505 "http version not supported" * 506 "variant also negotiates" * 507 "insufficient storage" * 509 "bandwidth limit exceeded" * 510 "not extended" * 511 "network authentication required" **注意**:不用担心记不住这些字符串,如果您设置错误,会有异常抛出,并列出该状态码表来帮助您进行更正。 ### res.length= 通过给定值设置 response Content-Length。 ### res.length 如果 Content-Length 作为数值存在,或者可以通过 `res.body` 来进行计算,则返回相应数值,否则返回 `undefined`。 ### res.body 获得 response body。 ### res.body= 设置 response body 为如下值: * `string` written * `Buffer` written * `Stream` piped * `Object` json-stringified * `null` no content response 如果 `res.status` 没有赋值,Koa会自动设置为 `200` 或 `204`。 #### String Content-Type 默认为 text/html 或者 text/plain,两种默认 charset 均为 utf-8。 Content-Length 同时会被设置。 #### Buffer Content-Type 默认为 application/octet-stream,Content-Length同时被设置。 #### Stream Content-Type 默认为 application/octet-stream。 #### Object Content-Type 默认为 application/json。 ### res.get(field) 获取 response header 中字段值,field 不区分大小写。 ``` var etag = this.get('ETag'); ``` ### res.set(field, value) 设置 response header 字段 `field` 的值为 `value`。 ``` this.set('Cache-Control', 'no-cache'); ``` ### res.set(fields) 使用对象同时设置 response header 中多个字段的值。 ``` this.set({ 'Etag': '1234', 'Last-Modified': date }); ``` ### res.remove(field) 移除 response header 中字段 `filed`。 ### res.type 获取 response `Content-Type`,不包含像 "charset" 这样的参数。 ``` var ct = this.type; // => "image/png" ``` ### res.type= 通过 mime 类型的字符串或者文件扩展名设置 response `Content-Type` ``` this.type = 'text/plain; charset=utf-8'; this.type = 'image/png'; this.type = '.png'; this.type = 'png'; ``` 注意:当可以根据 `res.type` 确定一个合适的 `charset` 时,`charset` 会自动被赋值。 比如 `res.type = 'html'` 时,charset 将会默认设置为 "utf-8"。然而当完整定义为 `res.type = 'text/html'`时,charset 不会自动设置。 ### res.redirect(url, [alt]) 执行 [302] 重定向到对应 `url`。 字符串 "back" 是一个特殊参数,其提供了 Referrer 支持。当没有Referrer时,使用 `alt` 或者 `/` 代替。 ``` this.redirect('back'); this.redirect('back', '/index.html'); this.redirect('/login'); this.redirect('http://google.com'); ``` 如果想要修改默认的 [302] 状态,直接在重定向之前或者之后执行即可。如果要修改 body,需要在重定向之前执行。 ``` this.status = 301; this.redirect('/cart'); this.body = 'Redirecting to shopping cart'; ``` ### res.attachment([filename]) 设置 "attachment" 的 `Content-Disposition`,用于给客户端发送信号来提示下载。filename 为可选参数,用于指定下载文件名。 ### res.headerSent 检查 response header 是否已经发送,用于在发生错误时检查客户端是否被通知。 ### res.lastModified 如果存在 `Last-Modified`,则以 `Date` 的形式返回。 ### res.lastModified= 以 UTC 格式设置 `Last-Modified`。您可以使用 `Date` 或 date 字符串来进行设置。 ``` this.response.lastModified = new Date(); ``` ### res.etag= 设置 包含 `"`s 的 ETag。注意没有对应的 `res.etag` 来获取其值。 ``` this.response.etag = crypto.createHash('md5').update(this.body).digest('hex'); ``` ### res.append(field, val) 在 header 的 `field` 后面 追加 `val`。 ### res.vary(field) 相当于执行res.append('Vary', field)。