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

cod*_*Joe 3 html javascript node.js express

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

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

用户可以仅将URL编辑为:http://localhost:3000/alpha/pages/Example.html并访问该页面。现在,我已经阅读了关于SO的几个类似问题,但找不到答案。我受到启发的有一些:Q1Q2Q3。但是,我无法找到解决问题的方法。

我当前的文件结构是: FileStructureLink

我试图限制对Example.html,ExampleTwo.htmlblabla.html的访问

我正在使用此代码来设置请​​求,但我想它们可能不正确:

app.use(express.static(path.join(__dirname, 'Alpha')));
app.use(express.static(path.join(__dirname, '/')));
app.use('/', express.static(__dirname + '/login.html'));
Run Code Online (Sandbox Code Playgroud)

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

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

中间件功能:

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

dri*_*hev 6

您可以通过将其他中间件附加到它来限制快速静态中间件。

var express = require("express");
var path = require( "path" );
var app = express();

function isLoggedIn( req, res, next ) {
   console.log("trying restricted file");
   next();
}

app.use( '/Alpha', isLoggedIn, express.static( path.join( __dirname, 'Alpha' ) ) );
app.use( express.static( path.join( __dirname, 'anonymous' ) ) );

app.listen( 3000 );
Run Code Online (Sandbox Code Playgroud)

通过每次调用此操作,localhost:3000/restricted/*将通过isLoggedIn函数。

编辑:根据您的文件结构修改代码。


van*_*tef 0

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

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

网址:本地主机:3000/alpha/示例

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

注意大小写