【问题标题】:Override app.get('*', func) route in express在 express 中覆盖 app.get('*', func) 路由
【发布时间】:2018-03-26 12:14:18
【问题描述】:

我有一个与 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”开头的所有路由提供应用吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2014-05-28
      • 2016-07-12
      相关资源
      最近更新 更多