限制Express和Nodejs中静态文件的路由

时间:2017-05-05 13:16:13

标签: javascript html node.js express

我目前正在尝试将路由限制为尚未登录的用户。我的主要问题是,即使我使用get方法定义页面,例如:

 app.get('/alpha/information', isLoggedIn,
        function(req, res){
            res.sendFile(path.join(__dirname + '/alpha/pages/Example.html'));
        });

用户只需将网址编辑为:http://localhost:3000/alpha/pages/Example.html并访问该网页即可。现在我已经阅读了几个类似的问题,但我找不到答案。其中一些受到启发的是:Q1Q2Q3。尽管如此,我无法找到解决问题的方法。

我目前的文件结构是: FileStructureLink

我正在尝试限制对 Example.html,ExampleTwo.html blabla.html

的访问

我正在使用此代码来设置请​​求,但我猜他们可能不对:

app.use(express.static(path.join(__dirname, 'Alpha')));
app.use(express.static(path.join(__dirname, '/')));
app.use('/', express.static(__dirname + '/login.html'));

app.use('/', express.static(__dirname + '/login.html'));专门用于将默认localhost:3000/加载为localhost:3000/login

如何限制对所有静态html文件的访问,而无需为每个文件编写路由?

中间件功能:

function isLoggedIn(req, res, next) {
        console.log('here is Authenticated', req.isAuthenticated())
        if (req.isAuthenticated()){
            return next();
        }
        res.redirect('/login');
    }

2 个答案:

答案 0 :(得分:0)

您正在将完整的Alpha目录设为公共目录,因此可以访问所有内容。此技术通常用于提供js / css / images。

您可以使用变量路由来获取html文件:

url:localhost:3000 / alpha / Example

app.get('/alpha/:name', function(req, res) {
    var page = req.params.name;
    res.sendFile(path.join(__dirname + '/alpha/pages/' + page + '.html'));
})

注意大写

答案 1 :(得分:0)

以下是如何操作的概念:

var express = require('express'),
    path = require('path');
    app = express();

app.use(function(req, res, next) {
    // Use your req.isAuthenticated logic here, that's all
    console.log('I am called before static middleware.');
    return next();
});
app.use(express.static( path.join(__dirname, 'public')));
app.use(function(req, res, next) {
    console.log('I am called after static middleware.');
    return next();
});

app.get('/', showClientRequest, function(req, res) {
    res.send('Hi! I am direct message from server :)');
});

function showClientRequest(req, res, next) {
    console.log('You can do something here too...');
    return next();
}

app.listen(3000);

完整的回购:

克隆节点作弊express_server_restrict_static_files,运行node app后跟npm install express

快乐帮助!