快递没有抓住'/'的请求

时间:2014-08-11 01:57:33

标签: node.js express routing

我有一个非常古怪的问题 - 不知何故,Express没有将我的请求捕获到我的根路径。

我的路线文件看起来如下:

'use strict';

var errors = require('./components/errors');
var auth = require('./controllers/auth');
var ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn;
module.exports = function(app) {

  // Insert routes below

  // All undefined asset or api routes should return a 404
  app.route('/:url(api|auth|components|app|bower_components|assets)/*')
   .get(errors[404]);

  app.route('/login')
    .get(auth.login)
    .post(auth.loginUser);
  app.route('/logout')
    .get(auth.logout);
  // All other routes should redirect to the index.html
  app.route('/*')
    .get(ensureLoggedIn('/login'), function(req, res) {
      console.log("req to /");
      res.sendfile(app.get('appPath') + '/index.html');
    });

};

那会发生什么:

  • 我请求'/'并将它直接发送到我的root并运行应用程序。除外:它不需要我登录,并且日志输出也没有显示已经发出任何请求。

  • 如果我请求'/ users'(Angular Route),它会按预期将我重定向到'/ login',然后继续其路径。

知道会导致这种行为的原因吗?

2 个答案:

答案 0 :(得分:0)

您是否使用快递公开任何静态资产?如果您是并且在公开资产后需要路线,则对“/”的请求将落在公共文件夹中并且不执行任何操作。

这有帮助吗?你能发布 server.js 吗?

我之前遇到过这个问题,这让我疯狂。

答案 1 :(得分:0)

在Angular接管之前,它似乎与所服务的“主要”页面的文件名有关。

最初,该文件的名称为 index.html ,因为它似乎默认提示Node提供 - 如果没有路由干扰,这是预期的行为。
文件重命名为 application.html 并更改服务资产后 - 一切正常,问题已解决。

我仍然不确定,为什么Route不会触发,索引会覆盖它。