开发者

Node.js/Express Routing to a static file URL

I don't have a problem as such as I have a work-around. However the process of understanding and developing the work-around has highlighted what seems to me a fundamental gap in my knowledge (as a self-taught programmer, this happens a lot ;-) !) and I can't seem to find the answer to plug it anywhere.

Standard node.js/express setup with for example:

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

Why when the user connects directly to index.htm (by typing in the URL although I've not tried clicking on a link) does nothing fire ? The page is served no problem. The obvious use-case for this is to check if the user is authenticated prior to serving the static page.

FYI the workaround is to pass the user to a route开发者_Go百科 such as "/authenticated" (which matches fine), do the check and then redirect and basically block everything else.

Thanks for educating me in advance ;-)

N

UPDATE to Raynos' question - yes (ignore the server/app variable name discrepancy).

// 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'}));
});

I've now found that the routing matches fine once you delete the static file i.e. in the original example, deleting index.htm means that the console will now log "/index.htm".

N


Just to bring some closure to this question:

Express static handler if it finds the file it will serve it and it won't let the other handlers to be called. If you remove it, then app.get('/index.htm' handler will be called. If you want to have a callback on all URLs just add server.use(function(req, res, next) {...}) before everything and that function will be called on all routers, make sure you call next if you want other middlewares or route handlers to be called.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜