也可以使用教程

环境
还安装 2
npm install koa-generator -g
koa2 koa2-test
添加开发环境
npm install cross-env --save-dev
package.json
{
"scripts": {
"dev":"cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www"
}
}
中间件
const Koa = require("koa");
const app = new Koa();
// logger
app.use(async (ctx, next) => {
await next();
const rt = ctx.response.get("X-Response-Time");
console.log(`${ctx.method} ${ctx.url} - ${rt}`);
});
// x-response-time
app.use(async (ctx, next) => {
const start = Date.now();
await next();
const ms = Date.now() - start;
ctx.set("X-Response-Time", `${ms}ms`);
});
// response
app.use(async (ctx) => {
ctx.body = "Hello World";
});
app.listen(3000);
规则
- app.use用于注册中间件,先编译一下
- 应用下一个机制,即前一个激活后一个后下一个
- 不包含方法和路径判断
小心
const http = require("http");
// 组合中间件
function compose(middlewareList) {
return function (ctx) {
function dispatch(i) {
const fn = middlewareList[i];
try {
return Promise.resolve(
fn(ctx, dispatch.bind(null, i + 1)) // promise
);
} catch (err) {
return Promise.reject(err);
}
}
return dispatch(0);
};
}
class LikeKoa2 {
constructor() {
this.middlewareList = [];
}
use(fn) {
this.middlewareList.push(fn);
return this;
}
createContext(req, res) {
const ctx = {
req,
res,
};
ctx.query = req.query;
return ctx;
}
handleRequest(ctx, fn) {
return fn(ctx);
}
callback() {
const fn = compose(this.middlewareList);
return (req, res) => {
const ctx = this.createContext(req, res);
return this.handleRequest(ctx, fn);
};
}
listen(...args) {
const server = http.createServer(this.callback());
server.listen(...args);
}
}
module.exports = LikeKoa2;
会议
npm install koa-generic-session --save
app.js
const session = require("koa-generic-session");
// session配置
app.keys = ["abcdefg"];
app.use(
session({
// 配置cookie
cookie: {
path: "/",
httpOnly: true,
maxAge: 24 * 60 * 60 * 1000,
},
})
);
redis
npm install redis koa-redis --save
app.js
const session = require("koa-generic-session");
const redisStore = require("koa-redis");
app.use(
session({
cookie: {
path: "/",
httpOnly: true,
maxAge: 24 * 60 * 60 * 1000,
},
// 配置redis
store: redisStore({
all: "127.0.0.1:6379",
}),
})
);
日记
npm install koa-morgan --save
app.js
const fs = require("fs");
const path = require("path");
const morgan = require("koa-morgan");
const ENV = process.env.NODE_ENV;
if (ENV !== "production") {
// 开发环境
app.use(morgan("dev"));
} else {
// 生产环境
const logFileName = path.join(__dirname, "logs", "access.log");
const writeStream = fs.createWriteStream(logFileName, {
flags: "a",
});
app.use(
morgan("combined", {
stream: writeStream,
})
);
}
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
上一篇:更改 Next.js 应用程序的端口号 下一篇:JavaScript 设计原则
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。