0

postgresql バージョン 0.9.7 でセイル バージョン 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 installnpm cache clearが、それでもこのエラーが発生し続けます。私はセイルのバージョン 0.10 にアップグレードすることができません。これは非常に大きなプロジェクトであり、アップグレードは非常に大きな労力を必要とするからです。同じバージョンでこの問題を修正するにはどうすればよいですか? どんな助けでも大歓迎です。

4

1 に答える 1

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

自己の値をログに記録しました。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 はオブジェクトではないため、エラーが発生する self._schema[key].type にアクセスします。テーブルにデータを挿入すると、問題は修正されましたが、テーブルにデータがなくても正常に動作するはずなので、sails-postgresql の論理的なバグだと思います。

于 2014-11-06T08:22:05.747 に答える