app.get('*', function(req, res) {
res.sendFile('index.html', {
root: './client/'
});
});
将所有请求转发到我的JS路由器,非常棒。所以重新加载localhost:3000 / foo正在运行。但是,如果我的应用程序向我的服务器发出无效请求,它仍会发送index.html
,这使得推断拼写错误比应该更加困难。
AFAIK处理此问题的唯一方法是在Express和Angular中明确定义每条路线,其他任何东西都是404.我错过了什么?
答案 0 :(得分:0)
这个想法通常是让SPA处理路由。因此,无论您发送什么请求(不是ajax),您都将获得索引页面。当页面落入拼写错误的网址时,它将点击“其他”路线并恢复为/
。
app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$httpProvider', function Configurator($stateProvider, $urlRouterProvider, $locationProvider, $httpProvider) {
$urlRouterProvider.otherwise('/');
$locationProvider.html5Mode(true);
}])
如果您想测量或处理它,那么您必须在路线中使用中间件。
要处理错误的ajax请求,您可以向请求对象添加“未处理”标志,如果匹配路由选择器,则使用middeware来处理它。如果它到达主发送块时没有,那么:
app.route('/*')
.get(function (req, res) {
console.log('in', req.unhandled, req.xhr);
if (req.unhandled && req.xhr) {
res.sendStatus(404);
} else {
res.sendFile(
app.get('appPath') + '/index.html', {
root: config.root
}
);
}
});