链接文件不公开时替代sendFile

时间:2017-03-27 17:12:14

标签: node.js

我正在做一个节点项目,我公开我的公共文件夹,如:

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

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

访问

我还创建了一个名为" views"的文件夹。我保存私人视图,javascript和与他们相关的CSS文件。它们是私人观点,因此我不希望任何用户访问它们。

由于我的html链接了我的css文件和javascript,当浏览器尝试获取它们时,它会显示" not found"因为它们不在公共文件夹中。

我在快递路线中将html作为sendFile发送。

有没有办法将所有文件放在公用文件夹中,然后保护它们不被公共用户访问?或者有sendFile的替代方案,因此文件在本地呈现,并且它不需要请求css和javascript文件

提前谢谢

1 个答案:

答案 0 :(得分:1)

视图技术上私有。因为它们是在服务器端呈现的,并且访问者无法直接访问它们。

但是你通常不想要像Javascript,CSS这样的东西,也不想要隐私。用户无论如何都会看到它们。将Node.js视图设为私有的唯一原因是Node.js需要在将它们发送给用户之前呈现它们。

如果您有私人文件,则可能需要执行相同操作。
否则,只需将它们放在/public文件夹中即可。你不应该在JS / CSS代码中隐藏任何秘密。

修改(以下评论):

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

要么构建一个包含所有必要HTML /视图的唯一响应 - CSS - JS。

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

您需要将变量渲染到视图中,就像您可能已经在使用其他视图一样。

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

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

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

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

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