koa2 初探

286 阅读4分钟

安装依赖

image.png

  1. 按照规范开始安装,node my-koa-app运行不起来啊,这是为什么?
    • 不使用脚手架安装项目当然要用pageage.json git init
    • 新建app.js
    • image.png
    • 运行 node app.js --- 跑起来啦~~

  1. 合理利用中间件app.use()
    • 官网解释:当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件。当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为。
    • koa 跟 express的区别,回调跟async
    • app.use接受两个参数 js app.use(async (ctx, next)) => {}
      • ctx 代表上下文对象,里边存有req,res等属性可以进行配置
      • next 控制进入下一个中间件进行运行
    • image.png

  1. koa实例方法:
    • app.listen()

      • 官方解释:Koa 应用程序不是 HTTP 服务器的1对1展现。 可以将一个或多个 Koa 应用程序安装在一起以形成具有单个HTTP服务器的更大应用程序。创建并返回 HTTP 服务器,将给定的参数传递给 Server#listen()
      • 他的语法糖
       const http = require('http');
       const https = require('https');
       const Koa = require('koa');
       const app = new Koa();
       http.createServer(app.callback()).listen(3000);
       https.createServer(app.callback()).listen(3001);
      
      • 第一句我理解他应该是说可以创建多个实例操作不同的事情,但是我觉得主要就是为了绑定端口号的
    • app.callback()

      • 返回适用于 http.createServer() 方法的回调函数来处理请求。你也可以使用此回调函数将 koa 应用程序挂载到 Connect/Express 应用程序中。
    • app.use(function) 中间件使用

      • 将给定的中间件方法添加到此应用程序。app.use() 返回 this, 因此可以链式表达.
      • app.use(someMiddleware)
        app.use(someOtherMiddleware)
        app.listen(3000)
        
        等同于:app.use(someMiddleware).use(someOtherMiddleware).listen(3000)
    • app.keys

      • 设置签名的 Cookie 密钥。
    • app.context

      • app.context 是从其创建 ctx 的原型。您可以通过编辑 app.context 为 ctx 添加其他属性
      • 注意: ctx 上的许多属性都是使用 getter ,setter 和 Object.defineProperty() 定义的。你只能通过在 app.context 上使用 Object.defineProperty() 来编辑这些属性(不推荐编辑)。
      • 我理解相当于我们js的prototype
    • app.on

      • 添加事件监听器
      • 错误处理
      app.on('error', (err, ctx) => {
        log.error('server error', err, ctx)
      });
      

  1. 上下文(Context) 具体方法和访问器

    • ctx.req
      • Node 的 request 对象.
    • ctx.res
      • Node 的 response 对象.
      • 注意: 绕过 Koa 的 response 处理是 不被支持的. 应避免使用以下 node 属性:
        • res.statusCode || res.writeHead() || res.write() || res.end()
    • ctx.request
      • koa 的 Request 对象.
    • ctx.response
      • koa 的 Response 对象.
    • ctx.state
      • 推荐的命名空间,用于通过中间件传递信息和你的前端视图。
    • ctx.app
      • 应用程序实例引用
    • ctx.cookies.get(name, [options])
      • 通过 options 获取 cookie name
    • ctx.cookies.set(name, value, [options])
      • 通过 options 设置 cookie name 的 value
    • ctx.throw([status], [msg], [properties])
      • 用来抛出一个包含 .status 属性错误的帮助方法,其默认值为 500。这样 Koa 就可以做出适当地响应。

  1. req res && request response

    注意: ctx.request是context经过封装的请求对象,用起来更直观和简单;ctx.req是context提供的node.js原生HTTP请求对象,可以得到更多的内容。
    • req && requset

      • request.header
        • 请求头对象。
      • request.header=
        • 设置请求头对象。
      • request.method
        • 请求方法。
      • request.method=
        • 设置请求方法,对于实现诸如 methodOverride() 的中间件是有用的。
      • request.length
        • 返回以数字返回请求的 Content-Length,或 undefined
      • request.url
        • 获取请求 URL.
      • request.url=
        • 设置请求 URL, 对 url 重写有用。
      • request.originalUrl
        • 获取请求原始URL。
      • request.origin
        • 获取URL的来源,包括 protocol 和 host
      • request.href
        • 获取完整的请求URL,包括 protocolhost 和 url
      • request.path
        • 获取请求路径名。
      • request.path=
        • 设置请求路径名,并在存在时保留查询字符串。
      • request.querystring
        • 根据 ? 获取原始查询字符串.
      • request.querystring=
        • 设置原始查询字符串。
      • request.search
        • 使用 ? 获取原始查询字符串。
      • request.search=
        • 设置原始查询字符串
      • request.type
        • 获取请求 Content-Type, 不含 "charset" 等参数。
      • request.charset
        • 存在时获取请求字符集,或者 undefined:utf-8...
      • request.query
        • 获取解析的查询字符串, 当没有查询字符串时,返回一个空对象。请注意,此 getter 支持嵌套解析。
      • request.query=
        • 将查询字符串设置为给定对象。请注意,此 setter 支持嵌套对象。
    • res && response

      • response.header
        • 响应头对象。
      • response.headers
        • 响应头对象。别名是 response.header
      • response.socket
        • 响应套接字。 作为 request.socket 指向 net.Socket 实例。
      • response.status
        • 获取响应状态。默认情况下,response.status 设置为 404 而不是像 node 的 res.statusCode 那样默认为 200
      • response.status=
        • 通过数字代码设置响应状态:
      • response.message
        • 获取响应的状态消息. 默认情况下, response.message 与 response.status 关联.
      • response.message=
        • 将响应的状态消息设置为给定值。
      • response.length=
        • 将响应的 Content-Length 设置为给定值。
      • response.length
        • 以数字返回响应的 Content-Length,或者从ctx.body推导出来,或者undefined
      • response.body
        • 获取响应主体。
      • response.body=
        • 将响应体设置为以下之一:

哎哟不看了不看了,官网都快看我了也没教我咋写呀