express服务托管Vue应用

314 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情

标准的vue项目打包后,实际是一个html和很多js文件,index.html中一般不包含具体页面,具体的页面通过js动态生产得出,尽管页面渲染方式和传统的网页开发有区别,但是其部署方式和传统网页并没有太大出入,都可以通过服务器静态资源托管打包后的项目。

以前我喜欢通过phpstudy软件进行本地的项目部署,但是这种方法需要安装phpstudy软件,如今node服务器开发也成为了主流之一,通过node服务托管vue项目更简单,不需要安装软件,只要有node环境即可。

初始化express项目

express是最流行的node服务端开发框架之一,它提供了express项目生成器,方便我们快速创建express项目。

对于 Node.js 8.2.0 及更高版本,可以通过npx来快速使用express项目生成器:

app-name 改为你的项目名称

npx express-generator app-name

项目生成器还提供了其他参数,具体可以参考官方文档 express生成器

启动express服务

进入项目目录,安装依赖

cd app-name
npm install

启动服务

npm run start

默认端口为3000,访问localhost:3000,能正常访问即可

托管vue项目

一般的静态页面可以放到public目录下即可,但是如果vue项目中使用得路由模式是history模式,那你会遇到访问首页正常,跳转其他路由也正常,但是在其他页面刷新后,页面显示404的情况。

原因是express会管理你的路由,vue在跳转页面时,并不会触发页面刷新,这时候不会经过服务端路由处理,所以跳转是正常的,而刷新页面,请求的路径会经过express,在express中并没有定义对应的路由,所以404了。

我们需要做的就是让express把路由的管理权限交给前端,为此我们可以使用一个express的中间件:connect-history-api-fallback

npm install --save connect-history-api-fallback
// app.js
var history = require('connect-history-api-fallback');

var app = express();
app.use(history());

重启服务后,再刷新页面已正常了。