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的文件。