将数据从 Sails 服务发送到控制器

Sending data from Sails Service to a Controller

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

这是我的控制器:

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 内容。我可以到达结束回调并按预期打印 "hit the end",但我无法将数据返回给控制器。

您在服务中使用的方法是异步方法,您可以像下面这样修改它们

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();
    }
}