【问题标题】:Node.js/Express Routing to a static file URLNode.js/Express 路由到静态文件 URL
【发布时间】:2011-08-19 09:19:37
【问题描述】:

我没有问题,因为我有解决方法。然而,理解和开发变通方法的过程突出了在我看来我知识上的一个根本差距(作为一个自学成才的程序员,这种情况经常发生;-)!)我似乎找不到答案插在任何地方。

标准 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 的问题 - 是的(忽略服务器/应用程序变量名称差异)。

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

没有

【问题讨论】:

    标签: file node.js static routing express


    【解决方案1】:

    只是为了结束这个问题:

    表示静态处理程序,如果它找到它将为它提供服务的文件并且它不会让其他处理程序被调用。如果您删除它,则将调用 app.get('/index.htm' 处理程序。如果您想对所有 URL 进行回调,只需在所有内容之前添加 server.use(function(req, res, next) {...}),该函数将在所有路由器上调用,如果您希望调用其他中间件或路由处理程序,请确保调用 next。

    【讨论】:

    • 感谢您不厌其烦地回答,但自从我提出这个问题以来的 5 年多时间里,Node 世界发生了很多变化,而您的回答虽然现在是正确的,但当时情况并非如此。