提取通用模型
全局通用模型放到 app.locals ,通常在 app.js 中设置,会合并到局部模型中
上下文通用模型放到 ctx.locals 中,通常在中间件中设置
局部模型一般在具体的 action 中设置
部分代码
-
app.js
// egg 创建好了 app 之后,如果存在此文件,并且是一个方法,则其会自动运行该方法一次 module.exports = (app) => { // 全局通用模型 app.locals = { globalTitle: "地区数据库", }; app.axios = require("axios").default; };
-
router.js
module.exports = (app) => { const { router } = app; const verifyToken = app.middleware.verifyToken({}, app); router.get("/", verifyToken, "home.index"); router.get("/login", "user.login"); router.post("/login", "user.handleLogin"); };
-
/middleware/verifyToken.js
// 鉴权的中间件 module.exports = (options, app) => { return async function (ctx, next) { // 你能不能进入首页 const token = ctx.cookies.get("token"); if (!token) { ctx.redirect("/login"); return; } const resp = await app.axios.get( `${app.config.$apiBase}/api/user/whoami`, { headers: { authorization: `Bearer ${token}`, }, } ); if (resp.data.code) { // 登录过期或被篡改 ctx.redirect("/login"); return; } // 上下文通用模型 ctx.locals.user = resp.data.data; await next(); } }
-
/controller/home.js
const Controller = require("egg").Controller; module.exports = class extends Controller { async index() { const resp = await this.app.axios.get(`${this.config.$apiBase}/api/local`); // 局部模型 var model = { title: "首页", provinces: resp.data, }; await this.ctx.render("home", model); } };
Egg👉 中间件
上一篇