【发布时间】:2021-03-03 20:52:13
【问题描述】:
在 Squarespace website 的 one page 上,我需要从页面 JavaScript 中调用 Node js 'require' 函数。我正在本地使用最小测试用例。节点已安装。
相关代码为:
require('dotenv').config();
AWS.config.update({
'region': process.env.AWS_REGION,
'accessKeyId' : process.env.ACCESS_KEY_ID,
'secretAccessKey' : process.env.SECRET_ACCESS_KEY,
'endpoint' : process.env.ENDPOINT
});
“秘密”ID 和密钥值将存储在隐藏的环境变量 .env 中,而不是在页面上。
仅使用此代码,我得到一个 require-undefined 错误。我需要必要的代码才能在 JavaScript 中识别 Node 函数。
我在这里看到了另一种方式的问题,即在 Node 中识别 JavaScript 函数,但没有这种方式。在这些答案中,我没有看到任何我可以使用的东西。我也在网上搜索过,但大部分回复都是这里的问题。
【问题讨论】:
-
在浏览器中没有
require的问题之后,你也会遇到process.env也无权访问的问题。该代码在您用户的浏览器中运行,您无法对其保密。 -
您需要将此代码移至后端。从前端到后端进行 Ajax 调用,让后端执行您需要的任何对 AWS 的安全访问。永远不能给客户秘密。没有办法在前端保护它们。你从哪里得到这个代码应该在前端执行的想法。我很确定 SquareSpace 的开发人员文档从未告诉过您这样做。所以,无论你从哪里得到这个想法,你一定误解了你应该做什么。
-
而且,没有在浏览器中运行的 nodejs
require()版本。这是一个仅在您的服务器上运行的 nodejs 函数。此外,您永远不会在浏览器中运行 nodejs 函数。您在 nodejs 服务器中运行它们。如果客户端代码需要仅在服务器上运行的东西,您可以在请求页面时将该信息嵌入到原始网页中(动态内容),或者您从网页向服务器发出 ajax 调用以请求服务器做一些操作或检索一些结果。 -
您不能在浏览器中使用 nodejs 功能。 nodejs 环境不在浏览器中运行。当然,有 Javascript 代码在浏览器中运行,但您不能在浏览器中使用 nodejs 功能。在您的代码中,您使用 AWS 和 SquareSpace 之间有什么联系?您尝试在 AWS 上做的事情是针对 nodejs 服务器的,而不是针对浏览器的。
-
客户端中没有什么是安全的。因此,如果您直接从客户端更改数据库,那么世界上任何黑客都可以完全访问您的 DynamoDB(这真的很糟糕)。您确实需要您自己的 nodejs 服务器来控制对 DynamicDB 的访问(包括您的所有凭据),并将 Ajax 调用从浏览器发送到您的 nodejs 服务器,然后该服务器安全地与您的 DynamicDB 数据库对话。然后,您的 nodejs 服务器可以验证传入请求以查看它们是否合理,并且您将所有 AWS 凭证仅保留在您的 nodejs 服务器上。
标签: javascript node.js require