后端nodekoa框架基本使用
cgdkoa 初体验
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const Koa = require("koa");
const app = new Koa();
app.use((ctx, next) => { ctx.response.body = "Hello Koa"; });
app.listen(3000, () => { console.log("服务启动成功"); });
|
koa 中间件
和 express 不同,koa 注册中间件只能通过 use 方法
koa 路由的使用
router 文件夹新建 user.js
1 2 3 4 5 6 7 8 9 10 11 12 13
| const Router = require("koa-router");
const router = new Router();
router.prefix("/user");
router.get("/", (ctx) => { ctx.response.body = "Get User List"; }); router.post("/", (ctx) => { ctx.response.body = "Add User"; }); module.exports = router;
|
在 index 下导入并使用
1 2 3 4 5 6 7 8 9 10 11 12 13
| const Koa = require("koa");
const app = new Koa(); const userRouter = require("./router/user");
app.use(userRouter.routes());
app.use(userRouter.allowedMethods());
app.listen(3000, () => { console.log("服务启动成功"); });
|
koa 解析 params 和 query 参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const Koa = require("koa");
const app = new Koa(); const Router = require("koa-router"); const userRouter = new Router();
userRouter.get("/user/:id", (ctx) => { console.log(ctx.request.query); console.log(ctx.request.params); });
app.use(userRouter.routes()); app.use(userRouter.allowedMethods());
app.listen(3000, () => { console.log("服务启动成功"); });
|
koa 解析 json 和 urlencoded 参数
1
| npm install koa-bodyparser
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const Koa = require("koa"); const bodyparser = require("koa-bodyparser"); const app = new Koa();
app.use(bodyparser());
app.use((ctx, next) => { console.log(ctx.request.body); });
app.listen(3000, () => { console.log("服务启动成功"); });
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const Koa = require("koa"); const multer = require("koa-multer");
const app = new Koa(); const upload = multer();
app.use(upload.any());
app.use((ctx, next) => { console.log(ctx.req.body); });
app.listen(3000, () => { console.log("服务启动成功"); });
|
koa 文件上传
用法和 express 一样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| const Koa = require("koa"); const path = require("path"); const multer = require("koa-multer"); const Router = require("koa-router");
const app = new Koa(); const userRouter = new Router();
const storage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, "./upload/"); }, filename: (req, file, cb) => { cb(null, Date.now() + path.extname(file.originalname)); }, }); const upload = multer({ storage, });
userRouter.post("/upload", upload.single("file"), (ctx) => { console.log(ctx.req.file); console.log("上传文件成功"); });
app.use(userRouter.routes()); app.listen(3000, () => { console.log("服务启动成功"); });
|
koa 返回参数和设置状态码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| const Koa = require("koa");
const app = new Koa();
app.use((ctx, next) => { ctx.status = 200;
ctx.body = { name: "aaa", age: 18, }; });
app.listen(3000, () => { console.log("服务启动成功"); });
|
koa 部署静态资源
1 2 3 4 5 6 7 8 9
| const Koa = require("koa"); const koaStatic = require("koa-static"); const app = new Koa();
app.use(koaStatic("./build"));
app.listen(3000, () => { console.log("服务启动成功"); });
|
koa 错误处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const Koa = require("koa");
const app = new Koa();
app.use((ctx, next) => { const isLogin = false; if (!isLogin) { ctx.app.emit("error", new Error("您还没有登录"), ctx); } });
app.on("error", (err, ctx) => { ctx.status = 401; ctx.body = err.message; });
app.listen(3000, () => { console.log("服务启动成功"); });
|