将数据从服务传递到控制器

时间:2016-01-19 17:47:58

标签: javascript sails.js

我创建了一个服务,目的是访问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值,但是当我记录联系人的值时,我得到了未定义。我认为我的问题与范围有关但不确定。

有人能指出我正确的方向吗?

2 个答案:

答案 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中阅读异步调用,并确保在使用数据时可以轻松掌握数据。