我创建了一个服务,目的是访问API。我需要将数据返回给我的控制器,但我不确定如何做到这一点,因为我完全不习惯。
我的服务:
// API call to get the ID of contact within Get Response with email address
getContact: function(options) {
// establish connection to API
var api = new getResponse(apiKey, apiUrl);
var contact = api.getContactsByEmail(options.email, null, null, function (response) {
JSON.stringify(response);
console.log(JSON.stringify(response));
});
return contact;
},
我知道API调用正在工作,因为当我记录响应时,我得到了正确的响应:
{"成功":真,"数据" {"错误":空," ID":1,&#34 ;结果":{" sds":{" ip":null," name":"全名"," ;来源":" API"" cycle_day":0,"电子邮件":" email@email.com",&# 34;运动":" ID"" created_on":"日期"" changed_on":空}}}}
我的控制器:
index: function(req, res) {
var contact = GetresponseService.getContact({email: 'email@email.com'});
console.log(contact);
return res.send(contact);
}
我想检索ID值,但是当我记录联系人的值时,我得到了未定义。我认为我的问题与范围有关但不确定。
有人能指出我正确的方向吗?
答案 0 :(得分:1)
因为您直接从api.getContactsByEmail()
分配一个不返回值的值。
根据node.js的性质,函数api.getContactsByEmail()
为您提供response
的回调。您必须从匿名回调函数中获取值,如下所示:
// API call to get the ID of contact within Get Response with email address
getContact: function(options) {
// establish connection to API
var api = new getResponse(apiKey, apiUrl);
var contact = "";
api.getContactsByEmail(options.email, null, null, function (response) {
contact = response;
JSON.stringify(response);
console.log(JSON.stringify(response));
return contact;
});
}
在我看来,最好是返回一个回调而不是直接返回值。
// API call to get the ID of contact within Get Response with email address
getContact: function(options, callback) {
// establish connection to API
var api = new getResponse(apiKey, apiUrl);
var contact = "";
api.getContactsByEmail(options.email, null, null, function (response) {
contact = response;
JSON.stringify(response);
console.log(JSON.stringify(response));
if(typeof(callback) == "function")
callback(contact);
else
return contact; // return contact if there is callback func.
});
}
您可以像以下一样使用它:
index: function(req, res) {
var contact;
GetresponseService.getContact({email: 'email@email.com'}, function(contactResult) {
contact = contactResult;
console.log(contact);
return res.send(contact);
});
}
答案 1 :(得分:0)
一切看起来都应该有效,不过我认为你遇到了这件事的问题
var contact = api.getContactsByEmail(options.email, null, null, function (response) {
JSON.stringify(response);
console.log(JSON.stringify(response));
});
api.getContactsByEmail是我假设的异步,所以这个声明性语句不起作用。
而是声明联系并在回调中返回它,例如:
api.getContactsByEmail(options.email, null, null, function (response) {
JSON.stringify(response);
console.log(JSON.stringify(response));
var contact = response.contacts; //or however you access the contact(s) from the response variable
//You should also be watching for errors in your callbacks, but that's a different topic
return contact;
});
在javascript中阅读异步调用,并确保在使用数据时可以轻松掌握数据。