React节点API请求devise模式
我需要使用API密钥向外部API发出API请求。 我知道如何通过编写一个onSubmit函数在React中创build这个API请求。 但是由于我有一个我想保密的API密钥,我将编写一个简单的Node应用程序来存放envvariables。
除了在节点中搞乱,这是我的第一次使用Node的生产经验,我想知道如果我的思维过程是正确的,如果不是的话,更好的方法来做到这一点。
这个问题大部分都是伪代码,因为我还没有开始使用Node部分。
这个想法是,从React组件内部它将调用Node应用程序,而后者将调用外部API。
React -> Node -> External API
所以React组件就是这样的:
handleSubmit: function() { var data = this.refs.testData.getDomNode().value; $.ajax({ url: '/my-node-endpoint', dataType: 'json', type: 'POST', data: { test: data }, success: function(data) { // Whatever success call I want to make }.bind(this) }) }
然后在我的Node应用程序,它会喜欢这样的事情:
app.post('/my-node-endpoint', function(req, res) { // Store the values we are posting as JSON // Start the post request // On End tell the React component everything is ok // Prosper });
一如既往,感谢您提供的任何帮助。
你的思考过程对我来说很合适。
如果您要调用的API来自不同的域,则必须像在此处那样在节点服务器上构build一个包装器。 除非外部API支持没有域限制的交叉源请求(例如MapBox Web服务 ),否则您将不得不这样做。
你的代码的几个改进:
- 据我所知,你可以使用
React.findDOMNode(this.refs.testData).value
而不是this.refs.testData.getDomNode().value
。 getDomNode()在v0.13中已被弃用。 - 对于所有的AJAX调用,您可以在Flux中使用Store概念。 商店保持数据的状态,包括通过AJAX请求更新数据。 在你的React UI代码中,你只需要调用商店的方法,这使得你的UI代码干净。 我通常自己创build一个商店class,而不使用Flux。