Sailsjs外部模块无法正常使用

时间:2016-11-03 20:51:05

标签: rest express sails.js

我使用restler(https://github.com/danwrong/restler)从外部源进行api调用。在Sailsjs中,根据我的理解,辅助函数称为服务。我把restler的代码放在他们自己的服务中,所以我不会一遍又一遍地重复使用相同的代码。但是,在我的控制器中工作正常的restler功能不再适用于该服务。例如:

//api/services/myService.js
module.export{
        httpGet: function(){
        var rest = require('restler');
        rest.get('http://google.com').on('complete', function(result) {
        if (result instanceof Error) {
            console.log('Error:', result.message);
            this.retry(5000); // try again after 5 sec
        } else {
            console.log(result);
        }
        });

    }

}

我知道我的服务使用正确;我已经尝试从服务中返回一个变量来仔细检查:

        httpGet: function(){
        var check = null;
        var rest = require('restler');
        rest.get('http://google.com').on('complete', function(result) {
        if (result instanceof Error) {
            check = false;
            console.log('Error:', result.message);
            this.retry(5000); // try again after 5 sec
        } else {
            console.log(result);
            check = true;
        }
        });
        return check;
        //in the controller,  myService.httpGet() returns null, not true or false
    }

非常感谢任何帮助。 Salisjs v0.12.4

2 个答案:

答案 0 :(得分:2)

最好让服务接受回调。

//api/services/myService.js
module.exports = {
        httpGet: function(callback){
        var rest = require('restler');
        rest.get('http://google.com').on('complete', function(result) {
        if (result instanceof Error) {
            console.log('Error:', result.message);
            return callback(result, null)
            //this.retry(5000); // try again after 5 sec
        } else {
            console.log(result);
            return callback(null, result)
        }
        });

    }

}

然后从您的控制器调用服务时传递回调

myService.httpGet(function callback(err, result){
    // handle error 

   // use result

})

此外,关于您的问题,您将提前从服务返回return check;,并为您分配值null

PS:您可以使用promises而不是使用回调(callback hell

答案 1 :(得分:0)

您应该将httpGet函数导出为模块对象的属性。基本上,你有一个"小"错字。而不是:

module.export{
        httpGet: function(){

你应该有这个:

module.exports = {
        httpGet: function(){

此外,如果您想要返回结果,请添加callback

module.exports = {
        httpGet: function(callback){
                 ... 
                 if (result instanceof Error) {
                    console.log('Error:', result.message);
                    return callback(result, null)
                 } else {
                    console.log(result);
                    return callback(null, result)
                 }
                    ...

...或使用Promises。