【问题标题】:sails.js unable to lift sails version 0.9.9 and sails-postgresql version 0.9.7sails.js 无法解除sails 0.9.9 版和sails-postgresql 0.9.7 版
【发布时间】:2014-11-05 08:05:38
【问题描述】:

我无法使用 0.9.7 版的 postgresql 来提升 0.9.9 版的风帆

这是我收到的错误消息

调试:降帆...

/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:285
      if(self._schema[key].type === 'text') caseSensitive = false;
                          ^
TypeError: Cannot read property 'type' of undefined
  at Object.sql.and (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:285:27)
  at /home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:256:19
  at Array.forEach (native)
  at [object Object].Query.where (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:195:24)
  at /home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:119:14
  at Array.forEach (native)
  at [object Object].Query._build (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:115:32)
  at [object Object].Query.find (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/query.js:35:21)
  at __FIND__ (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/adapter.js:362:40)
  at after (/home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/adapter.js:506:7)
  at /home/mandeep/iqr/thirstt/node_modules/sails-postgresql/lib/adapter.js:492:7

之前运行良好。不知道出了什么问题。我尝试删除node_modules 目录并在npm cache clear 之后执行npm install,但仍然不断收到此错误。我无法升级到 Sails 0.10 版,因为它是一个相当大的项目,升级将是一个非常大的努力。如何在同一版本中解决此问题?任何帮助将不胜感激。

【问题讨论】:

    标签: postgresql sails.js waterline sails-postgresql


    【解决方案1】:

    我发现了这个问题。对我来说似乎是一个sails-postgresql 问题。我在 config/bootstrap.js 中的模型上执行 findOne,当该表中没有记录时它失败了

    这是失败的部分( node_modules/sails-postgresql/lib/query.js ):

    Query.prototype.operators = function() {
    
      var self = this;
    
      var sql = {
        and: function(key, options, comparator) {
          var caseSensitive = true;
    
          // Check if key is a string
          if(self._schema[key].type === 'text') caseSensitive = false;
    
          processCriteria.call(self, key, options, '=', caseSensitive);
          self._query += (comparator || ' AND ');
        },
    

    我记录了 self 的值。当我在 bootstrap.js 中查询的表中存在数据时,self 看起来像这样

    { _values: 
       [ 2,
         1,
         'Mon, 29 Sep 2014 09:46:08 GMT',
         'Thu, 06 Nov 2014 08:24:34 GMT' ],
      _paramCount: 5,
      _query: 'UPDATE "cache" SET "val" = $1, "id" = $2, "createdAt" = $3, "updatedAt" = $4 ',
      _schema: 
       { val: { type: 'integer' },
         id: { type: 'integer', primaryKey: true, autoIncrement: true },
         createdAt: { type: 'timestamp with time zone' },
         updatedAt: { type: 'timestamp with time zone' } } 
    }
    

    但是,当表中没有数据时,self看起来像这样

    { _values: [],
      _paramCount: 1,
      _query: 'SELECT * FROM "cache" ',
      _schema: true 
    }
    

    然后它访问 self._schema[key].type 引发错误,因为 self._schema 在这种情况下不是对象。在向表中插入数据时,事情得到了修复,但我相信这是sails-postgresql 中的一个逻辑错误,因为即使表中没有数据它也应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 2015-09-24
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多