介绍
1.nuxt是什么?
Nuxt 是一个基于 Vue 生态的更高层的框架,为开发服务端渲染的 Vue 应用提供了极其便利的开发体验。更酷的是,你甚至可以用它来做为静态站生成器。
2.Egg.js是什么?
Egg.js是基于Koa的上层框架,为企业级框架和应用而生。
快速初始化
$ npm i egg-init -g$ egg-init egg-example --type=simple$ cd egg-example$ npm i$ npm install nuxt
目录结构
egg-example├── package.json├── app.js├── agent.js|—— client├── app| ├── router.js│ ├── controller│ | └── home.js│ ├── service│ | └── user.js│ ├── middleware│ | └── nuxt.js│ ├── schedule│ | └── task.js│ ├── public│ | └── reset.css│ ├── view│ | └── home.tpl│ └── extend│ ├── helper.js│ ├── request.js│ ├── response.js│ ├── context.js│ ├── application.js│ └── agent.js├── config| ├── plugin.js| ├── config.default.js│ ├── config.prod.js| ├── config.test.js| ├── config.local.js| └── config.unittest.js└── test├── middleware| └── nuxt.test.js└── controller└── home.test.js
新建NUXT中间件
const { Nuxt, Builder } = require("nuxt");let config = require("../../nuxt.config");module.exports = (options, app) => {const nuxtRender = new Nuxt(config);let isProduction = process.env.NODE_ENV === "production";if (isProduction) {new Builder(nuxtRender).build();}return async function(ctx, next) {let flag = false;let routerArr = [];if (!flag) {routerArr = app.router.stack.map(el => el.path);flag = true;}if (routerArr.some(el => el === ctx.path)) {return await next();}ctx.status = 200;ctx.req.session = ctx.session;const { res, req } = ctx;return new Promise((resolve, reject) => {ctx.res.on("close", resolve);ctx.res.on("finish", resolve);nuxtRender.render(req, res, promise => {promise.then(resolve).catch(reject);});});};};
新建NUXT目录以及配置文件
1.新建client目录,目录规范遵循nuxt配置
2.在项目根目录新建nuxt.config.js
module.exports = {srcDir: "client/",};
其余配置参考nuxt官方配置
问题
1.如果后端采用session鉴权,由于session依赖cookie,需要在asyncData的时候讲cookie传后端
asyncData({ params, store, req }) {if (process.server) {Object.keys(req.headers).map(key => {axios.defaults.headers.common[key] = req.headers[key];});}return axios.get("http://127.0.0.1:7001/api/news/list").then(res => {return { list: res.data };});}
2.使用官方axios直接进行代理
axios
