Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用节点';要求';来自浏览器JavaScript的函数_Javascript_Node.js_Require - Fatal编程技术网

调用节点';要求';来自浏览器JavaScript的函数

调用节点';要求';来自浏览器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

在一个Squarespace上,我需要从页面JavaScript中调用节点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
});
“secret”ID和键值将存储在隐藏的环境变量.env中,而不是存储在页面上

仅使用这段代码,我就得到了一个require未定义的错误。我需要必要的代码来获得JavaScript中识别的节点函数


我在这里看到了相反的问题,在Node中识别JavaScript函数,但没有这样的问题。在这些答案中,我没有看到任何我可以使用的东西。我也在网上搜索过,但大多数回答都是关于这里的问题。

我将从我的评论中总结几个相关的要点:

  • 首先,了解在浏览器中运行代码和在自己的nodejs服务器中运行代码之间的区别以及适合于每种类型的活动非常重要

  • 不能在浏览器中运行nodejs代码。虽然浏览器和nodejs都可以运行普通的Javascript代码,但整个nodejs运行时库仅在nodejs环境中可用,而不在浏览器中可用。类似地,在浏览器环境中也可以使用许多东西,例如DOM。因此,类似于
    require()
    dotenv
    模块的设计完全是为了在nodejs环境(通常是服务器)中运行,而不是在浏览器中运行。有一些第三方模块可以在这两种环境中运行(例如用于从其他服务器发出http请求的Axios)

  • 在浏览器的客户端Javascript中嵌入的任何内容都是不安全的。任何黑客或开发人员都可以使用它。因此,您永远不会希望将AWS凭据放入网页

  • 使用凭据(如AWS凭据)或访问数据库(如DynamoDB)时,您将不希望直接从浏览器访问这些凭据。要做到这一点,你必须将你的凭证直接嵌入到网页中,这样任何黑客都可以完全访问你的数据库,在那里他们可以造成各种破坏

  • 相反,您需要设置自己的服务器来管理AWS凭据,并控制数据库中修改和未修改的内容。通过这种方式,您可以在服务器上确保凭据的安全(永远不要将它们放在客户端),并且您的nodejs服务器能够决定对数据库的哪些更改是适当的,哪些是不适当的

  • 然后,如果您希望从客户端对数据库进行一些更改(添加、修改、删除),则可以从浏览器网页向nodejs服务器发送一个Ajax调用,指定要更改的内容。您的nodejs服务器验证请求(确保这是一项合理的操作,检查发出请求的用户是否有权这样做),然后您的nodejs服务器可以使用您的AWS凭据登录到数据库,并对数据库进行适当的更改

  • 如果客户端想要返回结果,那么服务器可以返回相应的结果


  • 出现浏览器中没有
    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服务器,然后nodejs服务器安全地与DynamicDB数据库通信。然后,您的nodejs服务器可以验证传入的请求,看看它们是否合理,并且您将所有AWS凭据仅保留在nodejs服务器上。我只想补充一点,现在很明显,我需要将站点迁移到其他地方。这是最基本的解决方案。