Javascript 如何使用Express和Nodejs保护静态路由

Javascript 如何使用Express和Nodejs保护静态路由,javascript,node.js,express,Javascript,Node.js,Express,我使用Node(最新版本)+Express,也是最新版本。我有两个文件夹,公共和安全。只有在登录后才能访问受保护的文件夹 我已经自己创建了一个登录系统,现在我想知道如何保护到这个“安全文件夹”的路由 我想设置一个到我的“安全”文件夹的静态路由(就像我对公共文件夹所做的那样),然后检查用户是否登录,但它不起作用 这是我认为应该起作用的 (...) app.use(express.static(path.join(__dirname, 'public'))); app.use(express.sta

我使用Node(最新版本)+Express,也是最新版本。我有两个文件夹,公共和安全。只有在登录后才能访问受保护的文件夹

我已经自己创建了一个登录系统,现在我想知道如何保护到这个“安全文件夹”的路由

我想设置一个到我的“安全”文件夹的静态路由(就像我对公共文件夹所做的那样),然后检查用户是否登录,但它不起作用

这是我认为应该起作用的

(...)
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'secured')));
(...)

function requireLogin(req, res, next) {
  if (req.session.loggedIn) {
    next(); // allow the next route to run
  } else {
    // require the user to log in
    res.redirect("/login"); 
  }
}

app.all("/secured/*", requireLogin, function(req, res, next) {
  next(); 

});

在首次使用app.use之前

添加如下内容

app.use(function(req, res, next) {
  if (req.url.match(/^\/secured\//)) {
    return requireLogin(req, res, next);
  }
  next();
})

在单独的路由上为您的私有静态文件指定不同的文件夹

app.use(express.static(path.join(__dirname, 'public')));
app.use('/private', express.static(path.join(__dirname, 'private')));
然后,您可以在每个请求上使用中间件

app.all('/private/*', function(req, res, next) {
  if (req.session.loggedIn) {
    next(); // allow the next route to run
  } else {
    // require the user to log in
    res.redirect("/login"); 
  }
})

嗯。这两种解决方案都不起作用。。。如果我尝试Pascal的代码,我会得到一个异常,表明req.session未定义。如果我尝试zeMicro的解决方案,我可以访问受保护的文件夹,但node会说:“无法获取/secured/index.html”。顺便问一下,这两者之间有什么区别:app.use(express.static(path.join(uu dirname,'secured'));还有:app.use('/secured',express.static(path.join(uu dirname,'secured'));似乎app.all('/private/*')只与私有文件夹匹配,但如果用户在/private/index.html中键入,则与此规则不匹配。好的,我现在就可以使用它了。诀窍是将app.all(/private/*)。。在定义到专用文件夹的静态路由之前。对不起,我是node的新手,但我今天学到了很多。谢谢大家!<代码>应用程序。所有都是
路由器
的一部分。正如您在上次评论中所说,将
路由器
置于
静态
中间件之上。您是否将安全文件夹置于公共文件夹中??对于现在(2019年2月之后)阅读此问题的任何人,请注意,这可以通过中间件轻松完成。