Sails错误:undefined不是函数

时间:2016-09-17 14:35:59

标签: javascript node.js sails.js

我正在尝试将sails作为中间服务器实现,但我无法通过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) 服务器进行api调用。它适用于成功的api呼叫但在Api呼叫失败时它不会工作。 它给出了这个错误。

/**
 * 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');
  }

};

这是我的ApiController.js

{{1}}

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

1 个答案:

答案 0 :(得分: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);
};