调用节点';要求';来自浏览器JavaScript的函数
在一个Squarespace上,我需要从页面JavaScript中调用节点js'require'函数。我正在本地处理一个最小的测试用例。节点已安装 有关守则如下:调用节点';要求';来自浏览器JavaScript的函数,javascript,node.js,require,Javascript,Node.js,Require,在一个Squarespace上,我需要从页面JavaScript中调用节点js'require'函数。我正在本地处理一个最小的测试用例。节点已安装 有关守则如下: require('dotenv').config(); AWS.config.update({ 'region': process.env.AWS_REGION, 'accessKeyId' : process.env.ACCESS_KEY_ID, 'secretAccessKey' : process.env.SECRE
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
});
“secret”ID和键值将存储在隐藏的环境变量.env中,而不是存储在页面上
仅使用这段代码,我就得到了一个require未定义的错误。我需要必要的代码来获得JavaScript中识别的节点函数
我在这里看到了相反的问题,在Node中识别JavaScript函数,但没有这样的问题。在这些答案中,我没有看到任何我可以使用的东西。我也在网上搜索过,但大多数回答都是关于这里的问题。我将从我的评论中总结几个相关的要点:
require()
和dotenv
模块的设计完全是为了在nodejs环境(通常是服务器)中运行,而不是在浏览器中运行。有一些第三方模块可以在这两种环境中运行(例如用于从其他服务器发出http请求的Axios)
出现浏览器中没有
require
的问题后,您将遇到无法访问process.env
的问题。该代码正在用户的浏览器中运行,您不能对他们保密。您需要将该代码移到后端。从前端到后端进行Ajax调用,让后端执行对AWS的任何安全访问。客户永远不能得到秘密。没有办法在前端保护它们。您是从哪里想到这段代码应该在前端执行的。我很确定SquareSpace的开发者文档从未告诉过你这样做。所以,无论你从哪里得到这个想法,你一定是误解了你应该做什么。而且,浏览器中没有运行nodejsrequire()
。这是一个仅在服务器上运行的nodejs函数。此外,您永远不会在浏览器中运行nodejs函数。您可以在nodejs服务器中运行它们。如果客户端代码需要仅在服务器上运行的内容,则可以在请求页面时将该信息嵌入原始网页(动态内容),或者从网页向服务器发出ajax调用,要求服务器执行某些操作或检索某些结果。不能在浏览器中使用nodejs功能。nodejs环境不在浏览器中运行。当然,有Javascript代码可以在浏览器中运行,但不能在浏览器中使用nodejs功能。在您的代码中,AWS和SquareSpace的使用之间有什么联系?你尝试在那里做的AWS工作是针对nodejs服务器的,而不是针对浏览器的。客户端中没有任何东西是安全的。因此,如果您直接从客户端更改数据库,那么世界上任何黑客都可以完全访问您的DynamoDB(这真的很糟糕)。您确实需要自己的nodejs服务器来控制对DynamicDB的访问(包括您的所有凭证),并且您可以将Ajax调用从浏览器发送到nodejs服务器,然后nodejs服务器安全地与DynamicDB数据库通信。然后,您的nodejs服务器可以验证传入的请求,看看它们是否合理,并且您将所有AWS凭据仅保留在nodejs服务器上。我只想补充一点,现在很明显,我需要将站点迁移到其他地方。这是最基本的解决方案。