Koa
yuhuo2022-03-28开发库NodeJs库
指南
安装
npm install koa
npm install @koa/cors @koa/router koa-bodyparser
构建服务
const Koa = require("koa");
const cors = require("@koa/cors");
const bodyParser = require("koa-bodyparser");
const koaStatic = require("koa-static");
// 初始化 Koa 应用实例
const app = new Koa();
// 注册cors,bodyparser中间件
app.use(cors());
app.use(bodyParser());
// 自定义中间件
app.use(async (ctx, next) => {
console.log("中间件:第一阶段");
// 错误处理
try {
await next();
} catch (err) {
// 只返回 JSON 格式的响应
ctx.status = err.status || 500;
ctx.body = { message: err.message };
}
console.log("中间件:第二阶段");
});
// 设置静态资源目录
// 通过 http://localhost:3000/img/a.jpg 直接访问 topic/koa/public/img/a.jpg
app.use(koaStatic("topic/koa/public"));
// 响应所有请求
app.use((ctx) => {
ctx.body = "Hello Koa!";
console.log("路由处理");
throw new Error("自定义错误");
});
// 运行服务器
app.listen(3000, () => {
console.log(`Example app listening on port 3000`);
});
路由组
const router = new Router();
router.get("/get", (ctx) => {
ctx.body = "get";
});
router.post("/post", (ctx) => {
ctx.body = "post";
});
router.put("/put", (ctx) => {
ctx.body = "put";
});
router.delete("/delete", (ctx) => {
ctx.body = "delete";
});
router.all("/all", (ctx) => {
ctx.body = {all: true};
});
app.use(router.routes()).use(router.allowedMethods());
对象
ctx
属性
属性 | 类型 | 描述 |
---|---|---|
request | object | request 对象 |
response | object | response 对象 |
url | string | 相当于 ctx.request.url |
path | string | 相当于 ctx.request.path |
body | string | 相当于 ctx.response.body |
status | status | 相当于 ctx.response.status |
方法
属性 | 描述 |
---|---|
throw(status: number, message?: string) | 跳过后续所有流程,直接返回异常状态码和信息 |
render(view: string, options?: object) | 渲染并返回HTML代码(示例见:HandleBars) |