• KOA 学习(四)


    响应(Response)

    Koa Response 对象是对 node 的 response 进一步抽象和封装,提供了日常 HTTP 服务器开发中一些有用的功能。

    response.header

    Response header 对象。

    response.socket

    response.status

    获取 response status。不同于 node 在默认情况下 res.statusCode 为200,res.status 并没有赋值。

    response.status=

    通过 数字状态码或者不区分大小写的字符串来设置response status:

    response.message

    Get response status message. By default, response.message is associated with response.status.

    response.message=

    Set response status message to the given value.

    response.length=

    通过给定值设置 response Content-Length。

    response.length

    如果 Content-Length 作为数值存在,或者可以通过 res.body 来进行计算,则返回相应数值,否则返回 undefined

    response.body

    获得 response body。

    response.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。

    response.get(field)

    获取 response header 中字段值,field 不区分大小写。

    response.set(field, value)

    ctx.set('Cache-Control', 'no-cache');

    response.append(field, value)

    ctx.append('Link', '<http://127.0.0.1/>');

    res.set(fields)

    使用对象同时设置 response header 中多个字段的值。

    ctx.set({
      'Etag': '1234',
      'Last-Modified': date
    });

    res.remove(field)

    移除 response header 中字段 filed

    res.type

    获取 response Content-Type,不包含像 "charset" 这样的参数。

    response.type=

    通过 mime 类型的字符串或者文件扩展名设置 response Content-Type

    response.is(types...)

    const minify = require('html-minifier');
    
    app.use(function * minifyHTML(next) {
      yield 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);
    });

    res.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] 状态,直接在重定向之前或者之后执行即可。如果要修改 body,需要在重定向之前执行。

    ctx.status = 301;
    ctx.redirect('/cart');
    ctx.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)。

  • 相关阅读:
    Oracle SGA详解
    oracle如何保证读一致性 第一弹
    Make命令完全详解教程
    ProC第三弹
    ProC第一弹
    ProC第二弹
    $(MAKE) , make命令
    转:跟我一起写Makefile (PDF重制版)
    [bzoj1105][POI2007]石头花园SKA
    可并堆学习
  • 原文地址:https://www.cnblogs.com/myzy/p/6513770.html
Copyright © 2020-2023  润新知