2016-09-17 83 views
3

我试图实现sails作为中间服务器,但我无法通过Sails服务器进行api调用。它适用于成功的api调用,但在Api调用失败时不起作用。 它给出了这个错误。Sails错误:undefined不是函数

this.error(res,err); 
    ^

TypeError: undefined is not a function 
    at error (/Users/nitin.tiwari/owner-app-backend/api/controllers/ApiController.js:26:12) 
    at IncomingMessage.<anonymous> (/Users/nitin.tiwari/owner-app-backend/api/services/XHR.js:54:11) 
    at IncomingMessage.emit (events.js:129:20) 
    at _stream_readable.js:908:16 
    at process._tickDomainCallback (node.js:381:11) 

这里是我的ApiController.js

/** 
* ApiController 
* 
* @description :: Server-side logic for managing apis 
* @help  :: See http://sailsjs.org/#!/documentation/concepts/Controllers 
*/ 

var config = sails.config; 

module.exports = { 

    /** 
    * @ApiController.ready() 
    * 
    * Prepare request object and calls XHR.send at the end. 
    * 
    */ 
    ready: function(req, res, method, data){ 
    var options; 
    var data = data || ''; 
    var protocol = 'http'; 
    var success = function(response){ 
     return res.ok(response); 
    }, 
    error = function(err){ 
     this.error(res,err); 
    }; 
     options = { 
     hostname: config.api.host, 
     path: req.originalUrl, 
     method: method, 
     headers: { 
      'Content-Type': 'application/json' 
     } 
     } 

    console.log(options,data); 
    XHR.send(options, data, success, error, protocol); 
    }, 

    /** 
    * @ApiController.get() 
    * 
    * Serves all the get request. 
    * 
    * Makes XHR to Rails API and reverts the response. 
    * 
    */ 
    error:function(res,err){ 
    if(err.status == 422 && err.error.error.code == 41){ 
     var obj = { 
      id: -1 
     } 
     return res.ok(obj); 
     } 
     return res.apiError(err); 
    }, 

    get: function(req, res){ 
    return this.ready(req, res, 'GET'); 
    } 

}; 

我已经实现了错误的功能,但它没有定义它显示。我现在无法调试它。

回答

3

这是因为你在error callBack里面使用这个,其中引用改变了所以this.error没有定义。为了做到这一点,在 一些变量中存储这个参考,并使用该变量而不是这个。

var protocol = 'http'; 
var self = this; 
var success = function(response){ 
    return res.ok(response); 
}, 
error = function(err){ 
    self.error(res,err); 
}; 
相关问题