Koa
初始化项目
全局安装脚手架
shnpm install -g koa-generator
使用脚手架创建项目
shkoa2 my-koa
安装依赖以及
cross-env
shnpm install npm install cross-env -D
修改
package.json
中的 dev 脚本json// 添加 cross-env NODE_ENV=dev "dev": "cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www"
移除多余中间件及目录
views
文件夹public
文件夹中的javascripts
与stylesheets
koa-views
中间件
解决跨域
安装
koa2-cors
在
app.js
中使用jsconst cors = require('koa2-cors'); app.use( cors({ origin(ctx) { return '*'; }, maxAge: 5, credentials: true, allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], allowHeaders: ['Content-Type', 'Authorization', 'Accept'], exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] }) );
Form-Data 与 Files
脚手架默认安装的
koa-bodyparser
无法获取 Form-Data 的数据添加
koa2-formidable
即可获取 Form-Data 的数据Form-Data 中的文件会自动存放在指定的路径中
jsconst formidable = require('koa2-formidable'); // 指定保存的路径、是否保存扩展名等 app.use(formidable({ multiples: true, uploadDir: path.join(__dirname, 'public', 'images'), keepExtensions: true })); // 获取文件 ctx.request.files
JWT
安装
koa-jwt
生成
token
js// koa-jwt中内置jsonwebtoken,无需单独安装 const jwt = require('jsonwebtoken'); // 参数1:token 存储的内容 // 参数2:密钥 // 参数3:过期时间 const token = jwt.sign({ userId: user[0]._id },'IHS9794Nis',{ expiresIn: '12h' });
无
token
或token
过期时,返回401jsapp.use((ctx, next) => { return next().catch((err) => { if (err.status === 401) { ctx.status = 401; ctx.body = '请先登录'; } else { throw err; } }); });
使用
koa-jwt
验证token
jsconst koajwt = require('koa-jwt'); const SECURT_KEY = 'IHS9794Nis'; // 密钥需与加密时相同 // unless 中可设置不验证的 url app.use( koajwt({ secret: SECURT_KEY }).unless({ path: [/\/api\/user\/register/, /\/api\/user\/login/] }) );
获取
token
中的内容jsconst jwt = require('jsonwebtoken'); app.use((ctx, next) => { let token = ctx.header.authorization; if (token) { let payload = jwt.decode(token.split(' ')[1], 'IHS9794Nis'); ctx.request.body.userId = payload.userId; } return next(); });
预览: