2011-08-19 103 views
1

我没有问题,例如我有一个解决方法。然而,理解和开发解决方法的过程突出了我在我的知识中的一个根本性差距(作为一个自学成才的程序员,这发生了很多;-)!),我似乎无法找到答案将其插入任何地方。Node.js/Express路由到一个静态文件的URL

标准的node.js /快速安装使用,例如:

app.get('/index.htm', function (request, response) { 
    console.log("/index.htm"); 
}); 
app.get('*', function (request, response) { 
    console.log("*"); 
}); 

为什么当用户直接连接到index.htm的(在输入网址,虽然我还没有尝试点击链接)确实没有火?该页面没有问题。明显的用例是在服务静态页面之前检查用户是否已通过身份验证。

仅供参考,解决方法是将用户传递给诸如“/ authenticated”(匹配正常)的路由,执行检查然后重定向并基本阻止其他所有内容。

感谢教育我提前;-)

ň

UPDATE到Raynos'的问题 - 是的(忽略服务器/应用程序变量名称不一致)。

// 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

只是带来一些关闭这个问题:

快速静态处理程序,如果它发现它会成为它的文件,它不会让被称为另一个处理程序。如果你删除它,那么app.get('/index.htm'处理程序将被调用。如果您希望在所有URL上都回拨所有URL,只需在所有路由器之前添加server.use(function(req, res, next) {...}),并且该函数将在所有路由器上调用,那么如果您希望调用其他中间件或路由处理程序,请确保您接下来调用。

+0

感谢您花时间回答问题,但自从我问了这个问题后的5年以来,节点世界发生了很多变化,而您的回答虽然现在正确,但当时并非如此。 –