Koa框架由Express的原班人马打造,主要是通过组合不同的generator来避免重复繁琐的回调函数嵌套。
安装方法如下
npm install koa -g
一个简单的koa应用
const koa = require('koa');
const app = new koa();
app.use(ctx => {
ctx.body = 'hello world';
});
app.listen(3000);
启动应用就可以在本地的3000端口看到一个最简单的web应用。
常用方法
app.listen():启动一个服务的快捷方法,其实是作为原生http.createServer()方法的简单封装,实际上运行如下:
const http = require('http');
const koa = require('koa');
const app = koa();
http.createServer(app.callback()).listen(3000);
当然你可以一次启动多个服务。
app.use(function):将给定的函数作为中间件加载
Koa将req和res对象封装成了一个ctx上下文对象,可以通过ctx.request和ctx.response对象访问相应的方法和属性,如下:
ctx.request ctx.responsectx上下文对象中的api:
ctx.req:node.js中的request对象
ctx.res:node.js中的response对象
ctx.app:app实例
ctx.state:命名空间
ctx.cookies.get(name,[options]):返回相应的cookie
ctx.cookies.set(name,value,[options]):设置新的cookie,相应的option参数有:
{
signed: Boolean,
expires: Date,
path: String,默认为'/',
domain: String,
secure: Boolean,
httpOnly: Boolean,默认为true
}
ctx.throw(msg, [status]):抛出错误的辅助方法,默认status为500
ctx.assert(value, [msg], [status], [properties]):用来断言的辅助方法
Request对象API
req.header:返回请求头
req.method:返回请求方法
req.method=:设置
req.length:返回conten-length
req.url:返回请求url
req.url=:设置
req.path:返回path
req.path=:设置
req.querystring:返回查询字符串,去除头部的?
req.querystring=:设置
req.search:返回查询字符串,包含?
req.search=:设置
req.host:返回主机名
req.type:返回content-type
req.query:返回经过解析的查询字符串,就是一个对象,类似于Express的req.query,不存在返回空对象
req.query=:设置
req.fresh:检查客户端请求的缓存是否最新,当缓存为最新时,可编写业务逻辑返回304
req.stale:与rea.fresh相反
req.protocol:返回请求协议名
req.secure:判断协议是否为https
req.ip:返回请求IP
req.ips:返回请求IP列表
req.subdomains:返回子域名数组,如当请求域名为 "tobi.ferrets.example.com" 时候,返回 ["ferrets", "tobi"]
req.is(type):判断请求对象中的content-type是否为给定type的快捷方法
req.accepts(type):判断请求对象中 Accept 是否为给定 type 的快捷方法,当匹配到符合的类型时,返回最匹配的类型,否则返回 false
req.acceptsEncodings(encodings):判断客户端是否接受给定的编码方式的快捷方法
req.acceptsCharsets(charsets):同req.acceptsEncodings(encodings)
req.acceptsLanguages(langs):同req.acceptsEncodings(encodings)
Response对象的API
res.header:获取返回头
res.status:获取返回的HTTP状态码
res.status=:设置
res.length:返回content-length属性
res.length=:设置
res.body:获取响应体
res.body=:设置
res.get(field):获取相应的返回头属性
res.set(field, value):设置
set.set(fields):一次设置多个,参数为对象
res.remove(fields):删除指定的返回头属性
res.type:获取返回的content-type
res.type=:设置
res.redirect(url,[alt]):重定向,可以使用关键字back返回上一个页面(refer),没有refer时,返回/
res.attachment:返回熟悉 Content-Disposition 为 "attachment",并告知客户端进行下载。
res.headerSent:判断一个响应头是否已经发送到客户端,通常用来检测客户端是否收到了错误信息。
res.lastModified:返回last-modified属性
res.lastModified=:设置
res.etag=:设置etag
网友评论