我希望能够直接从节点(使用express)将JSON发布到另一台服务器。基本上,我不想在调用不同的api时暴露我的api密钥,但仍然可以调用该服务。
这是我正在尝试做的,但是从服务器而不是客户端: https://github.com/GetResponse/DevZone/blob/master/API/examples/javascript_synopsis.html
我想要实现的客户端JS:
var api_key = 'ENTER_YOUR_API_KEY_HERE';
// API 2.x URL
var api_url = 'http://api2.getresponse.com';
function add_contact() {
var campaigns = {};
// find campaign named 'test'
$.ajax({
url : api_url,
data : JSON.stringify({
'jsonrpc' : '2.0',
'method' : 'get_campaigns',
'params' : [
api_key,
{
// find by name literally
'name' : { 'EQUALS' : 'test' }
}
],
'id' : 1
}),
type : 'POST',
contentType : 'application/json',
dataType : 'JSON',
crossDomain : true,
async : false,
success : function(response) {
// uncomment following line to preview Response
// alert(JSON.stringify(response));
campaigns = response.result;
}
});
// because there can be only (too much HIGHLANDER movie) one campaign of this name
// first key is the CAMPAIGN_ID required by next method
// (this ID is constant and should be cached for future use)
var CAMPAIGN_ID;
for(var key in campaigns) {
CAMPAIGN_ID = key;
break;
}
$.ajax({
url : api_url,
data : JSON.stringify({
'jsonrpc' : '2.0',
'method' : 'add_contact',
'params' : [
api_key,
{
// identifier of 'test' campaign
'campaign' : CAMPAIGN_ID,
// basic info
'name' : 'Test',
'email' : 'test@test.test',
// custom fields
'customs' : [
{
'name' : 'likes_to_drink',
'content' : 'tea'
},
{
'name' : 'likes_to_eat',
'content' : 'steak'
}
]
}
],
'id' : 2
}),
type : 'POST',
contentType : 'application/json',
dataType : 'JSON',
crossDomain : true,
async : false,
success : function(response)
{
// uncomment following line to preview Response
// alert(JSON.stringify(response));
alert('Contact added');
}
});
}
答案 0 :(得分:3)
我认为您的节点服务器可以充当客户端请求的第三方服务器的代理。
您的服务器可以收集api呼叫所需的所有输入参数,例如add_contact
。具有访问第三方服务器的正确凭据的节点服务器进行api调用,并将收到的响应传递给客户端。
您可以在节点中使用内置的http库,或the request module(更方便)来进行这些调用。
基本上,你需要为你需要的外部api制作一个包装器,然后你就可以了。
我希望它有所帮助。
答案 1 :(得分:2)
Node.js为类似于jQuery的AJAX-API的HTTP请求提供API: http://nodejs.org/api/http.html#http_http_request_options_callback