假设我有一个运行在localhost:2000
上的node.js服务器,它路由GET请求并调用一个外部API来填充响应。
现在,我还有一个在localhost:3000
上运行的react.js前端,它在localhost:2000
上查询节点服务器以使用axios获取响应。
这样做有什么意义?如果我已经在我的react应用程序中使用axios,为什么我不能直接从中调用外部API?这仅仅是设计决定吗?这样可以实现服务器与客户端的分离和更简洁的代码,或者它具有更高的用途?
PS。为了清楚起见-此方法与为react应用程序使用代理没有什么不同。正确?即在package.json
中配置代理,并让react app仅仅是fetch
端点?
答案 0 :(得分:2)
React是应用程序的前端部分,而node.js服务器是后端。应用程序前端部分的所有内容都将向客户端公开,但服务器端将对客户端隐藏,无论您在服务器中所做的任何操作都将保持安全(取决于您采取的安全措施)。
如果您只想访问第三方API且没有安全原因(例如,简单地调用第三方服务即可获得您所在国家/地区的官方时间),则可以直接这样做从您的React应用中您也可以使用节点中的服务器来重定向它(首先调用服务器,然后从服务器调用API)。这里的第二个选项似乎很简单,但是在某些情况下这样做可能会有所帮助,例如,如果您使用一些安全性凭证调用API,并且又想在服务器中配置它们,以确保安全性,或者您不想公开调用该外部API的逻辑。通常,从数据库获取信息是在服务器端完成的,而不是在前端端完成的,因为您不想公开数据库的服务器,凭据等。
这可能是一项设计决策,出于安全原因,您可以在其中获得在服务器端调用外部API的逻辑。如果您在React(意味着前端)中管理此信息,您将向客户端公开很多此类信息(前端中的所有内容都会在某个时刻加载到浏览器中)。
在React应用程序中保留简单的调用,在服务器端保留重要的安全性调用。