gpt4 book ai didi

node.js - 当链接文件不公开时替代 sendFile

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:07 25 4
gpt4 key购买 nike

我正在做一个 Node 项目,在其中公开我的公共(public)文件夹,例如:

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

现在,我的所有公共(public)文件都可以通过 localhost:8080/*

访问

我还创建了一个名为“views”的文件夹,在其中保存私有(private) View 、与其关联的 javascript 和 css 文件。它们是私有(private) View ,因此我不希望任何用户访问它们。

由于我的 html 与我的 css 文件和 javascript 链接,当浏览器尝试获取它们时,它会显示“未找到”,因为它们不在公共(public)文件夹中。

我正在快速路由中将 html 作为 sendFile 发送。

有什么方法可以将所有文件放在公共(public)文件夹中,然后保护它们不被公共(public)用户访问?或者是否有sendFile的替代方案,因此文件在本地渲染,不需要请求css和javascript文件

提前谢谢

最佳答案

View 技术上是私有(private)的。因为它们是在服务器端呈现的,访问者无法直接访问。

但是您通常不希望 Javascript、CSS 或 View 之类的东西是私有(private)的。无论如何,用户都会看到它们。将 Node.js View 等内容设为私有(private)的唯一原因是,在将它们发送给用户之前,它们需要由 Node.js 渲染。

如果您有私有(private)文件,您可能也想这样做。
否则,只需将它们放在 /public 文件夹中即可。您不应该在 JS/CSS 代码中隐藏任何 secret 。

编辑(以下评论):

您有几种方法可以做到这一点。

要么构建一个包含所有必要的 HTML/ View - CSS - JS 的独特响应。

render('view.ejs', { css: 'body { color: blue }' })

您需要将该变量渲染到您的 View 中,就像您可能已经对其他 View 所做的那样。

您可能还想从文件中读取它:

fs.readFile(`${__dirname}/css/style.css`, (error, styles) => { ... }

或者单独处理每个文件请求:

Node.js - external JS and CSS files (just using node.js not express)

(如果您使用 Node.js View ,只需渲染这些 View 而不是 HTML 文件)

关于node.js - 当链接文件不公开时替代 sendFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43052572/

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