【发布时间】:2019-07-18 16:46:30
【问题描述】:
我正在构建一个基于 Express 的应用程序,其工作方式如下:
- '/' 由 Express 和 pug 模板引擎提供的静态主站点
- '/admin' 管理面板由 VueJS 在历史模式下使用 Vue Router 处理
目前,如果我转到 '/admin/about',它可以正常工作,但是当我刷新页面时,它会引发 404 错误。如何将服务器配置为使用 Vue Router 处理所有管理路由('/admin/xxx'),但使用 Express 处理所有主站点路由(就像目前一样)?
我尝试使用 connect-history-api-fallback 中间件,但没有成功。
app.js
const path = require('path');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const history = require('connect-history-api-fallback');
const adminRoutes = require('./routes/admin');
const publicRoutes = require('./routes/index');
app.set('view engine', 'pug');
app.set('views', 'views');
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/admin', adminRoutes);
app.use(publicRoutes);
app.use(history());
app.use((req, res, next) => {
res.status(404).render('404', {
pageTitle: 'Page Not Found'
});
});
app.listen(3000);
routes/index.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res, next) => {
res.render('home/index', {
pageTitle: 'Lorem Ipsum',
path: '/'
});
});
module.exports = router;
routes/admin.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res, next) => {
res.render('admin/index', {
pageTitle: 'Admin Panel',
path: '/'
});
});
module.exports = router;
【问题讨论】: