1. koa2安装
-
全局安装koa命令:cnpm i koa-generator -g
-
生成项目:Koa2 项目名
-
安装依赖:
cd 项目名
cnpm install
-
安装nodemon跟cross-env(对不同环境进行监听,热监听):
cnpm i nodemon cross-env --save-dev
-
修改package.json中的配置:
"scripts": { "start": "node ./bin/www", "dev": "cross-env NODE_ENV=dev nodemon --inspect=9829 ./bin/www.js", "prod": "cross-env NODE_ENV=prod nodemon ./bin/www.js" }
-
重写启动项目:
npm run dev
2. koa2几个知识点
-
ctx相当于req跟res的结合
-
如何返回数据到客户端:ctx.body (注express使用:req.json({}))
router.get('/string', async (ctx, next) => { ctx.body = 'koa2 string' })
-
如何获取客户端传来的json数据:
ctx.request.body
如何获取get请求参数:
ctx.query
如何获取session:
ctx.session
-
如何添加根路由
const router = require('koa-router')() //根路由 router.prefix('/users') //要访问/bar,它的路径是:/users/bar router.get('/bar', function (ctx, next) { ctx.body = 'this is a users/bar response' })
-
自定义中间件next前面为啥要加await:中间件函数被async修饰,返回promise对象,由express中next作用可知道next是调用下一个中间件,因此在其前面加上await将异步操作变成同步的写法。
app.use(async (ctx, next) => { const start = new Date() await next() const ms = new Date() - start console.log(`${ctx.method} ${ctx.url} - ${ms}ms`) })
3. 登陆:koa-generic-session 跟 koa-redis实现将登陆信息存放到session、redis中
-
安装:
cnpm i koa-generic-session koa-redis redis --save
-
App.js中配置:koa-generic-session、koa-redis设置返回客户端cookie
const session = require("koa-generic-session"); const RedisStore = require("koa-redis"); //session配置 app.keys = ["jiangyf0725"]; app.use(session({ cookie: { path: '/', httpOnly: true, maxAge: 24 * 60 * 60 *1000 }, //redis跟session进行绑定 store: RedisStore({ all: "redis端口号" }) }))
4. 日志记录
-
安装:koa-morgan记录日志
cnpm i koa-morgan --save
-
生成环境:将日志写到指定文件中
开发环境:将日志写在控制
const path = require("path"); const fs = require("fs"); const morgan = require("koa-morgan"); const env = process.env.NODE_ENV; if(env == 'dev') { //开发环境 app.use(morgan('dev')); }else { //生产环境写日志文件路径 const aceessPathName = path.join(__dirname, "log", "access.log"); const writeStream = fs.createWriteStream(aceessPathName, { flag: "a" }) app.use( morgan('combined', {stream: writeStream}) ); }