gpt4 book ai didi

javascript - 我可以对目录中的任何文件使用什么快速路由?

转载 作者:行者123 更新时间:2023-12-02 21:56:44 24 4
gpt4 key购买 nike

我有一个 PDF 文件目录,我只希望授权用户访问该目录。目前,问题是当我导航到文件夹中包含给定文件的 URL 时,获取回调未运行。例如,我希望当我访问 localhost:3000/Buyer_templates/file.pdf 时,它将在 get 中运行回调。目前,它允许我查看pdf,并且回调未执行。

app.get('/Buyer_templates/*', (req,res) => {
res.redirect('/')
})

如果网址不是文件(例如 /Buyer_templates/blahblahblah),则上述代码有效

但是,当我输入文件名(例如 Buyer_templates/file.pdf)时,回调不会激活。

我也在 get 中尝试了这些路径

/Buyer_templates/*.*

/Buyer_templates/(.*)

问题是回调没有被执行。如何才能在 URL 中输入任何 PDF 文件名时运行回调?

最佳答案

当您配置static时在 Express 中的路由中,根文件夹的层次结构内的任何文件都会自动提供服务。例如,如果我有一个像这样的文件夹结构:

root
- public
-- css
-- js
-- img

我的服务器看起来像

app.use(express.static('public'));
app.use((req, res, next) => {
console.log(`REQUEST LOGGED: ${req.url}`);
return next();
});
...

当我访问驻留在该静态根目录中的任何文件 URL 时,例如

/css/somefile.css
/js/somefile.js
/img/somefile.jpg

然后您会注意到请求永远不会到达 console.log,这是因为 Express 知道这些是 a.log。文件和b.驻留在静态目录中,因此不需要任何进一步的处理(这就是为什么您会注意到,如果您尝试非文件 URL,它们进一步处理)。

在向静态文件添加某种形式的授权方面,有几种方法可以做到,例如

  • 从静态路由中排除此特定文件夹并处理您在任何其他路由中执行的授权
app.get('/Buyer_templates/*', (req, res, next) => 
if (/* some authorization check */) {
return res.sendFile('...');
} else {
return res.status(403).send('Unauthorized');
}
});
  • 在设置静态路由之前添加授权中间件(尽管这意味着需要做更多的工作来确定要检查哪些网址等)
app.use((req, res, next) => {
if (req.path.startsWith('/Buyer_templates')) {
return res.status(403).send('Unauthorized');
}
return next();
})
app.use(express.static(__dirname));

上面的例子只是为了简单的演示,但是它们应该能够给你带来想要的效果。另外,值得指出的是 express.static(__dirname) 是不可取的,因为它会使所有文件都可以从应用程序的根目录访问,其中包括您的任何代码可能已托管在服务器上。更具体,即 express.static('Buyer_templates')

关于javascript - 我可以对目录中的任何文件使用什么快速路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59985602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com