我没有问题,因为我有一个解决方法。然而,理解和开发解决方案的过程突出了我认为在我的知识中的一个根本差距(作为一个自学成才的程序员,这发生了很多;-)!)我似乎无法找到答案把它插在任何地方。
标准node.js / express设置,例如:
app.get('/index.htm', function (request, response) {
console.log("/index.htm");
});
app.get('*', function (request, response) {
console.log("*");
});
为什么当用户直接连接到index.htm时(通过输入URL,虽然我没有尝试点击链接)什么都没有解决?该页面没有问题。显而易见的用例是在提供静态页面之前检查用户是否已经过身份验证。
仅供参考,解决方法是将用户传递给路径,例如“/ authenticated”(匹配正常),执行检查,然后重定向并基本上阻止其他所有内容。
感谢您提前教育我; - )
<磷>氮更新到Raynos的问题 - 是(忽略服务器/ app变量名称差异)。
// CREATE SERVER
var server = express.createServer();
server.configure(function() {
server.use(express.static(__dirname + '/public'));
server.use(express.logger());
server.use(express.errorHandler({dumpExceptions: true, showStack: true}));
// start of session stuff
server.use(express.cookieParser());
server.use(express.session({store: sessionStore, secret: 'secret', key: 'express.sid'}));
});
我现在发现删除静态文件后路由匹配正常,即在原始示例中,删除index.htm意味着控制台现在将记录“/index.htm”。
<磷>氮答案 0 :(得分:0)
只是为这个问题带来一些结束:
快速静态处理程序如果找到它将为其提供服务的文件,它将不会让其他处理程序被调用。如果删除它,则会调用app.get('/index.htm'
处理程序。如果你想要对所有URL进行回调,只需在所有路由器上调用所有内容之前添加server.use(function(req, res, next) {...})
,如果你想要调用其他中间件或路由处理程序,请确保调用next。