Koa
初始化项目
全局安装脚手架
shnpm install -g koa-generator使用脚手架创建项目
shkoa2 my-koa安装依赖以及
cross-envshnpm 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与stylesheetskoa-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生成
tokenjs// 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验证tokenjsconst 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(); });







