将数据从Sails服务发送到Controller

时间:2015-05-06 22:07:12

标签: javascript httprequest sails.js

我正在使用SailsJS编写一个非常基本的HTTP请求。我从我正在调用的api中获取了我想要的数据,但我无法弄清楚如何将它从我的服务传递回控制器并最终使用正文中的数据响应请求。

这是我的控制器:

module.exports = {
    retrieve: function(req, res) {
        var output = AccountService.retrieveAccountInfo();
        console.log(output);
        return res.send(output);
    }
}

这是我正在打电话的服务。

module.exports = {

    retrieveAccountInfo: function() {
        var http = require('http');

        var options = {
            host: 'localhost',
            port: 8280,
            path: '/sample/account?id=1',
            method: 'GET',
            headers: {
                'sample': 'header'
            }
        };

        var req = http.request(options, function(res) {
            var data = '';
            console.log('STATUS: ' + res.statusCode);
            console.log('HEADERS: ' + JSON.stringify(res.headers) + '\n\n');
            res.setEncoding('utf8');
            res.on('data', function(chunk) {
                console.log('BODY: ' + chunk);
                data += chunk;
            });

            res.on('end', function() {
                console.log('hit the end');
                return JSON.stringify(data);
            });
        });

        req.on('error', function(e) {
            console.log('problem with request: ' + e.message);
        });

        req.end();
    }
}

我可能在这里遗漏了一些基本的JavaScript内容。我可以到达最终回调并按预期打印“命中结束”,但我无法将数据返回给控制器。

1 个答案:

答案 0 :(得分:5)

您在服务中使用的方法是异步方法,您可以修改它们,如下所示

module.exports = {
    retrieve: function(req, res) {
        AccountService.retrieveAccountInfo(function(error, output) {
            console.log(output);
            return res.send(output);
        });
    }
}

服务 - 使用回调方法

module.exports = {

    retrieveAccountInfo: function(callback) {
        var http = require('http');

        //.....

        res.on('end', function() {
             console.log('hit the end');
             callback(null, JSON.stringify(data));
        });

        //.....

        req.on('error', function(e) {
            console.log('problem with request: ' + e.message);
            callback(e); //error
        });

        req.end();
    }
}