ExpressJS限制对公共文件的访问

有没有办法隐藏节点服务器提供的文件? 我试图重新路由某些文件和目录,但在Express 4.X中没有任何工作。 当某些文件被请求时,我也尝试发送4XX HTTP响应,但这只适用于目录path。 无论我做什么,如果有一个由Node服务的文件,那么用户将能够看到源代码。 这是Express的工作原理吗? 它是否意味着成为一个生产框架的开发框架?

现在我正试图发送不好的答复。

完整的server.js

var path = require('path'), express = require('express'), var app = express(); app.use('/', express.static(__dirname)); app.use('/', express.static('dist')); // not working app.get('/client/config/app.js', function(req, res) { res.sendStatus(400); }); app.listen(3001, function() { console.log('listening'); }); 

如果指定目录path,则能够发送响应,但如果指定了完整的文件path,则不能发送响应。 这工作:

 app.get('/client/config/', function(req, res) { res.sendStatus(400); }); 

这不是:

 app.get('/client/config/app.js', function(req, res) { res.sendStatus(400); }); 

我也尝试使用app.use路由。 那也行不通。

我现在可以做的最好的事情就是用Gulp来隐藏源代码,但是我想可以很容易地用JS代码来解开它。

一行罪魁祸首

 app.use('/', express.static(__dirname)); 

这条线是说可以拉什么东西。 您可以将其replace为:

 app.use('/', express.static(__dirname + '/public')); 

然后把东西放在你想要查看的公共目录中。 对于要优先考虑的路线,请将它们放在其他声明之前。 所以你可以放置:

 app.get('/client/config/app.js', function(req, res) { res.sendStatus(400); }); 

高于一切。 不过,好像你可能不需要它,如果你只是解决了第一个问题,那么你是好的。 另请参阅HTTP状态码。 你可能需要404或403这种types的文件。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html