安装依赖
- 按照规范开始安装,node my-koa-app运行不起来啊,这是为什么?
- 不使用脚手架安装项目当然要用pageage.json
git init - 新建app.js
- 运行 node app.js --- 跑起来啦~~
- 不使用脚手架安装项目当然要用pageage.json
- 合理利用中间件app.use()
- 官网解释:当一个中间件调用
next()则该函数暂停并将控制传递给定义的下一个中间件。当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为。 - koa 跟 express的区别,回调跟async
- app.use接受两个参数
js app.use(async (ctx, next)) => {}- ctx 代表上下文对象,里边存有req,res等属性可以进行配置
- next 控制进入下一个中间件进行运行
- 官网解释:当一个中间件调用
- 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);- 第一句我理解他应该是说可以创建多个实例操作不同的事情,但是我觉得主要就是为了绑定端口号的
- 官方解释:Koa 应用程序不是 HTTP 服务器的1对1展现。 可以将一个或多个 Koa 应用程序安装在一起以形成具有单个HTTP服务器的更大应用程序。创建并返回 HTTP 服务器,将给定的参数传递给
-
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) });
-
-
上下文(Context) 具体方法和访问器
- ctx.req
- Node 的
request对象.
- Node 的
- ctx.res
- Node 的
response对象. - 注意: 绕过 Koa 的 response 处理是 不被支持的. 应避免使用以下 node 属性:
res.statusCode||res.writeHead()||res.write()||res.end()
- Node 的
- ctx.request
- koa 的
Request对象.
- koa 的
- ctx.response
- koa 的
Response对象.
- koa 的
- ctx.state
- 推荐的命名空间,用于通过中间件传递信息和你的前端视图。
- ctx.app
- 应用程序实例引用
- ctx.cookies.get(name, [options])
- 通过
options获取 cookiename
- 通过
- ctx.cookies.set(name, value, [options])
- 通过
options设置 cookiename的value
- 通过
- ctx.throw([status], [msg], [properties])
- 用来抛出一个包含
.status属性错误的帮助方法,其默认值为500。这样 Koa 就可以做出适当地响应。
- 用来抛出一个包含
- ctx.req
-
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。
- 返回以数字返回请求的 Content-Length,或
- request.url
- 获取请求 URL.
- request.url=
- 设置请求 URL, 对 url 重写有用。
- request.originalUrl
- 获取请求原始URL。
- request.origin
- 获取URL的来源,包括
protocol和host。
- 获取URL的来源,包括
- request.href
- 获取完整的请求URL,包括
protocol,host和url。
- 获取完整的请求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 不 支持嵌套对象。
- request.header
-
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。
- 以数字返回响应的 Content-Length,或者从
- response.body
- 获取响应主体。
- response.body=
- 将响应体设置为以下之一:
- response.header
-