1

Express で Node を使用しており、ORM を Mongoose (Mongo) から JugglingDB (Postgres) に移動しています。JugglingDB で定義した単純なスキーマを使用するのに苦労しています。

私のスキーマは次のとおりです。

var UserToken = schema.define('UserToken', {
  token: {type: String, index: true}
}, {
  tablename: 'user_token'
});

var User = schema.define('User', {
  email: {type: String, required: true, index: true},
  password_hash: String,
  first_name: String,
  last_name: String,
  role: {type: String, required: true, default: 'member'},
  language: {type: String, default: 'en'},
  api_key: String,
  active: {type: Boolean, required: true, default: true},
  confirmed: Date,
  created: {type: Date, default: function() { return new Date() }},
  modified: Date
}, {
  tablename: 'users'
});

UserToken.belongsTo(User, {as: 'user', foreignKey: 'userId'});

// Define the schema in the DB if it is not there
schema.isActual(function(err, actual) {
  if (!actual) {
    schema.autoupdate();
  }
});

ノードを起動しようとすると、次のエラーが発生します。

{ [error: relation "UserToken" does not exist]
  name: 'error',
  severity: 'ERROR',
  code: '42P01',
  detail: undefined,
  hint: undefined,
  position: undefined,
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  file: 'namespace.c',
  line: '407',
  routine: 'RangeVarGetRelidExtended' }
{ [error: relation "User" does not exist]
  name: 'error',
  severity: 'ERROR',
  code: '42P01',
  detail: undefined,
  hint: undefined,
  position: undefined,
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  file: 'namespace.c',
  line: '407',
  routine: 'RangeVarGetRelidExtended' }

不足しているものを教えてください。助けてくれてありがとう!

4

2 に答える 2

2

JugglingDB で定義されたすべての PostgreSQL スキーマについては、自動移行または自動更新する必要があります。automigrate 機能は、テーブルが存在する場合はそれを破棄し、再作成します。自動更新機能はテーブルを変更します。

あなたの場合、スキーマを定義した後に次を実行する必要があります。

schema.autoupdate(); // または自動移行

automigrate と autoupdate は本質的に非同期であるため、テーブルが作成される前にテーブルにアクセスしてはなりません。この場合、q モジュールまたはコールバック メカニズムを使用して、この問題に取り組むことができます。q モジュール ソリューションを使用したコード スニペットは、次の場所に示されています。

(役に立ったら星をつけてください:) ) https://gist.github.com/woonketwong/7619585

その結果、JugglingDB にプル リクエストが送信されました。この修正により、PostgreSQL スキーマの移行 (および表の属性の設定) の仕様の説明が更新されました。リクエストが受け入れられ、次のマスター リポジトリにマージされました。

https://github.com/1602/jugglingdb/commit/5702d41e2cca2383715ad6b7263b25b7da2f181c

于 2013-12-01T07:21:47.483 に答える