一、 Vue 和 Express 怎么实现前后端分离呢
在接触 Express 的时候,更多的是使用 html、ejs、jade 这样的模板来实现的 View 层页面开发。首先我没有萌生直接在 views 目录里面,使用.vue 后缀文件来代替类似.ejs 模板文件的想法。 我首先想到的是,先把后端工程搭建起来,然后再用 vue-cli 生成前端 vue 工程,但是两个工程基础架构都建好了,但是怎么将其两者有机地结合在一起呢?
解决思路
之前自己在用 Vue 做项目的过程中,也是前后端分离的,只不过前端是在一个工程,后端是 Java 的一个工程,那么想要前后端交互,一般是将前端代码打包好之后,放到后端工程的某个目录下。 前端打包:vue-cli 用的是 webpack 打包,运行 npm run build 打包命令会在根目录下生成一个 dist 文件夹,这个文件夹中包含前端的 img,css,js 文件。 在 express 中提供静态资源:在使用 express 生成器生成的项目工程中,一般会将 ejs 模板文件放在 views 文件夹下,然后 express 有一个内置中间件,可以解决访问静态资源的问题。
app.use(express.static('public')) //public是指的放置前端静态资源的文件夹名称,如果有不清楚的地方,可以去express官网看看
同样是访问静态资源,那么在 express.static () 中间件中,写入 vue-cli 打包好之后的 dist 文件夹名称就行了,这下就可以访问前端工程下的静态资源了。
二、前后端分离之后,怎么渲染模板或者页面
Express+ejs (jade) 模式下,呈现视图模板的话主要是通过 ejs (jade) 模板渲染的方式,但是 Express+Vue 模式下,因为 Vue 是单页应用,所以 Express 针对任何路由的处理,都会只返回一个页面(html 方式)。
Express+ejs (jade) 模式 因为接触 Node 也比较浅,实际操作的项目很少,所以对于 express 的原理有些生疏。前两天我对 Express 框架做了一个小的复习,大致了解了理论,今天在做 Vue+Express 的时候,怎么渲染页面的原理我竟然忘了!为 Express 开发模板引擎,我看了这篇之后,才恍然大悟,后端对路由做处理的时候,会使用 res.render('about') 来渲染并返回模板。about 指的就是 views 文件夹下的 about.ejs 模板文件。
Express+Vue 模式 使用 Vue 开发前端页面,实际上后端 express 在对路由做处理的时候,只会返回一个页面,即前端打包生成后的 index.html 文件。
// 因为是单页应用 所有请求都走/dist/index.html
app.get('*', function(req, res) {
const html = fs.readFileSync(path.resolve(__dirname, '../dist/index.html'), 'utf-8')
res.send(html)
})
这样前后端分离也做好了,页面访问也没有问题,然后就可以继续开发前端页面逻辑及后端路由处理及数据库操作。