2012-02-26 29 views
7

在Node.js下的Express中,我想检查特定路径下的请求(例如,/restricted),如果可接受,请将请求由静态提供者,它处理缓存标头等重定向到express.js中的静态文件

如果我只是使用app.get('/restricted/:file', ...),然后使用res.sendfile发送静态文件,如果批准,它将忽略任何缓存标题,并始终发送文件。

我不能使用一揽子登录检查,因为不同的用户应该只能得到不同的文件。

实现此目的的最佳方法是什么?

回答

14
var express = require("express"); 
var app = express.createServer(); 

var staticMiddleware = express.static(__dirname + "/public"); 

app.get("/restricted/:file", function(req, res, next) { 
    var authorized = true; 
    //Compute authorization appropriately here 
    if (authorized) { 
    staticMiddleware(req, res, next); 
    } else { 
    res.send(401); 
    } 
}); 
app.listen(3456); 

这将在适当时使用静态中间件,包括其所有功能。否则,您可以酌情处理未经授权的请求。

+0

正是我所需要的,谢谢! – w00t 2012-02-27 10:37:50

+0

通常(不受保护)我通过'app.use(express.static('public'));'提供页面。在使用你的方法时,HTML加载但所有样式和脚本都消失了(404)。 – Sebastian 2016-08-01 19:54:22

相关问题