在express中覆盖app.get('*',func)路由

时间:2017-10-14 14:11:41

标签: javascript node.js angular express passport.js

我有一个与NodeJS服务器一起运行的Angular应用程序。

我的server.js文件中的代码:

app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'dist/index.html'));
});

require('./server/routes/routes')(app, passport);

似乎阻止了对我的api的任何GET请求,例如:

module.exports = function (app, passport) {
  app.get('/api/profile', isLoggedIn, function (req, res) {
      res.status(200).json(req.user);
  });

当导出的/ api / profile处理程序更改为帖子时,请求将起作用。

路由是否应该覆盖初始处理程序?怎么做到这一点?我可以为所有路线提供应用程序,不包括以'/ api'开头吗?

1 个答案:

答案 0 :(得分:1)

移动app.get('*'),使其成为声明的最后一条路线:

require('./server/routes/routes')(app, passport);

app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'dist/index.html'));
});

Express按照声明的顺序检查路由处理程序,而不是按其特定顺序(它们与特定请求的匹配程度)进行检查。