我有一个非常古怪的问题 - 不知何故,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',然后继续其路径。
知道会导致这种行为的原因吗?
答案 0 :(得分:0)
您是否使用快递公开任何静态资产?如果您是并且在公开资产后需要路线,则对“/”的请求将落在公共文件夹中并且不执行任何操作。
这有帮助吗?你能发布 server.js 吗?
我之前遇到过这个问题,这让我疯狂。
答案 1 :(得分:0)
在Angular接管之前,它似乎与所服务的“主要”页面的文件名有关。
最初,该文件的名称为 index.html ,因为它似乎默认提示Node提供 - 如果没有路由干扰,这是预期的行为。
将主文件重命名为 application.html 并更改服务资产后 - 一切正常,问题已解决。
我仍然不确定,为什么Route不会触发,索引会覆盖它。