具有Express和nginx反向代理的Vue路由器历史模式

时间:2017-01-09 10:23:24

标签: node.js express nginx vue-router

我已将nginx配置为将所有请求传递给Node:

server {
    listen 80;
    server_name domain.tld;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

在服务器上,我有一个运行Express的Node应用程序,它为我的Vue索引文件提供服务。

app.get('/', (req, res) => {
  res.sendFile(`${__dirname}/app/index.html`);
});

我想在Vue路由器中使用HTML5历史记录模式,因此我在路由器设置中设置了mode: 'history'。我安装了connect-history-api-fallback并进行了设置:

const history = require('connect-history-api-fallback');
app.use(history());

如果用户首次点击http://domain.tld,则路由可以正常工作。但是,如果直接访问子路由,或刷新页面,我会收到一个未找到的错误。

如何更改配置?

2 个答案:

答案 0 :(得分:2)

由于我无法使connect-history-api-fallback库正常工作,我自己创建了一个:

app.use((req, res, next) => {
  if (!req.originalUrl.includes('/dist/', 0)) {
    res.sendFile(`${__dirname}/app/index.html`);
  } else {
    next();
  }
});

除了/app/index.html脚本和图片所在的位置之外,这将发送/dist

答案 1 :(得分:1)

我遇到了同样的问题。

当订单是:

时,它不会工作
app.use(express.static('web'));
app.use(history());

,但在以下情况下可以使用:

app.use(history());
app.use(express.static('web'));

整个示例应用:

var express = require('express');
var history = require('connect-history-api-fallback');
var app = express();

app.use(history());
app.use(express.static('web'));

app.listen(3002, function () {
    console.log('Example app listening on port 3002!')
});

网络文件夹中,我有:
index.html的
和其他js,css文件。