NodeJS
中的核心框架koa
的常用中间件
-
koa-router
路由中间件npm i koa-router
GitHub地址const koa = require("koa") const Router = require("koa-router") const app = new koa() const router = new Router() router.get("/",(ctx) => { ctx.body = "hello world" }) app.use(router.routes()).use(router.allowedMethods())
-
koa-json-error
错误页面处理 文档说明process.env.NODE_ENV === 'production'
用来判断生产环境还是开发环境
如果是生产环境就不打印发生错误的文件目录NodeJS
中生产环境和开发环境的判断 文章链接const koa = require("koa") const app = new koa() const error = require("koa-json-error") const optiopn = { postFormat: (e, {stack,...rest}) => process.env.NODE_ENV === 'production' ? rest : {stack, ...rest} } app.use(error(optiopn))
在生产环境中的效果,没有了
stack
磁盘的信息
-
koa-body
用来处理post
请求的参数,注意在使用app.use(koaBody())
的时候要写到所有中间件前面,并且也可以解析传递的文件 文档说明post
请求的参数都保存在ctx.request.body
中- 只是单纯的获取传递的字段
const koa = require("koa") const koaBody= require("koa-body") const app = new koa() app.use(koaBody()) app.post("/user",(ctx) => { console.log(ctx.request.body) // {id: 1,name: "小火车"} })
- 需要获取传递的文件
post
请求的文件保存在ctx.request.files
中,但是上传文件的时候需要设置koaBody(multipart: true)
,用来指定可以上传文件 uploadDir
指定上传的文件路径keepExtensions: true
保留文件的后缀名koa_body({ multipart: true, formidable: { uploadDir: path.join(__dirname,"/public/upload"), keepExtensions: true } })
-
koa-parameter
用来校验传递的参数 文档说明
基于parameter
的第三方模块,一些验证规则可参考 GitHub地址
也可以使用正则表达式name: {type:"string" , required: true,format: /^[0-9a-zA-Z_]{5,16}$/,message:"必须是字母数字下划线5-16位"}
const koa = require("koa") const app = new koa() const parameter = require("koa-parameter") app.use(parameter(app)) app.post("/user",(ctx) => { ctx.verifyParams({ name: {type: "string",required: true}, password: {type:"string" , required: true,format: /^[0-9a-zA-Z_]{5,16}$/,message:"必须是字母数字下划线5-16位"} }) ctx.body = "hello world" })
出现错误的验证信息
-
koa-jwt
用来校验token
时候合格 文档说明const Koa = require("koa") const koa_jwt = require("koa-jwt") const Router = require("koa-router") const jwt= require("jsonwebtoken") const router = new Router() const app = new Koa() const secret = "小火车况且况且" const token = jwt.sign({name: "小火车"}, secret,{expiresIn: "1h"}) const need_Token = koa_jwt({secret}) router.get("/", (ctx) => { ctx.body = "hello world" }) // 说明需要验证token是否存在,要求请求头传递token router.post("/user", need_Token,(ctx) => { ctx.body = "hello user" }) app.use(router) app.listen(3000,() => console.log("localhost:3000"));
-
koa-static
将指定的目录托管 文档说明const static = require('koa-static'); const Koa = require('koa'); const app = new Koa(); app.use(static(__dirname + 'public')); app.listen(3000); console.log('listening on port 3000');