先说一下koa的基本使用
初始化 npm init -y
安装 npm install koa
const Koa = require("koa");
const app = new Koa();
// ctx ==> context
app.use(async (ctx) => {
ctx.body = "hello world";
});
app.listen(3000);
?在浏览器中打开http://localhost:3000可以看到如下效果
使用脚手架 koa-generator 创建 koa2 项目
windows+r, cmd 打开命令行 使用如下命令全局安装 koa-generator
npm i -g koa-generator
我们新建一个测试文件夹, 在里面执行如下命令
koa2 koa2-demo
打开文件夹koa2-demo 安装需要的包
npm i
执行
npm run dev
项目开始
在router下面新建路由,原来
router下面已经有unser.js和index.js这里继续新建comment.js然后模仿user.js的内容创建路由
各行代码的含义如下 ctx是req和res的结合,ctx.query可以获取到原来请求体里面携带的所有数据,是一个对象,可以定义一个对象来接收。
ctx.request.body可以获取请求体里面的内容
首先router/comment.js中定义路由
const router = require('koa-router')()
// 前缀,所有的接口后面先写上这个前缀
router.prefix('/comment')
// get 请求,第一个参数是路径,第二个参数是箭头函数
// ctx是req,res的集合 ctx能返回响应的内容
// ctx里面有请求携带的参数,可以直接打点调用
router.get('/list', function (ctx, next) {
const queryObj = ctx.query
// 返回响应内容
ctx.body = {
errno:0,
data:[
{id:1,userName:"张三",content:"张三真帅!!!!"},
{id:2,userName:"李四",content:"李四真帅!!!!"},
{id:3,userName:"王五",content:"王五真帅!!!!"},
]
}
})
// post 请求
router.post('/create', function (ctx, next) {
// 获取请求体,
const body= ctx.request.body;
console.log(body);
ctx.body = "这是创建留言列表接口,留言的内容是:" + body.userName + body.userPassword + body.date
})
// 输出
module.exports = router
##在app.js中注册路由,原来的app.js中已经包括了很多内容,在原先的基础上增加
const Koa = require("koa");
const app = new Koa();
const views = require("koa-views");
const json = require("koa-json");
const onerror = require("koa-onerror");
const bodyparser = require("koa-bodyparser");
const logger = require("koa-logger");
const index = require("./routes/index");
const users = require("./routes/users");
const comment = require("./routes/comment");
// error handler
onerror(app);
// middlewares
app.use(
bodyparser({
enableTypes: ["json", "form", "text"],
})
);
app.use(json());
app.use(logger());
app.use(require("koa-static")(__dirname + "/public"));
app.use(
views(__dirname + "/views", {
extension: "pug",
})
);
// logger
app.use(async (ctx, next) => {
const start = new Date();
await next();
const ms = new Date() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
// 模拟登录校验
app.use(async (ctx, next) => {
// ctx.query可以获取到请求体里面携带的所有内容
// 已经转成了对象,可以直接定义一个对象来接收
// 然后打点调用
const queryObj = ctx.query;
if (queryObj.userName === "张三") {
// 登录成功,执行下一步
await next();
}else{
ctx.body="请登录"
}
});
// routes
app.use(index.routes(), index.allowedMethods());
app.use(users.routes(), users.allowedMethods());
app.use(comment.routes(), comment.allowedMethods());
// error-handling
app.on("error", (err, ctx) => {
console.error("server error", err, ctx);
});
module.exports = app;
把路由复制到postman中测试,注意url的路径,分别使用POST 和 GET方法,效果如下: