1

CompoundJS の世界を進んでいくうちに、スキーマを定義する 2 つの方法に出会いました。

初め:

var Product = describe('Product', function () {
  property('upc', String);
  property('name', String);
  set('restPath', pathTo.products);
});

2番:

var Schema = require('jugglingdb').Schema;
var schema = new Schema('memory');

var Product = schema.define('Product', {
  upc: { type: Number, index: true },
  name: { type: String, limit: 150, index: true },
  createdAt: { type: Date, default: Date.now },
  modifiedAt: { type: Date, default: Date.now }
}, {
  restPath: pathTo.products
});

最初のものは機能しますが、古いデザインのように見えます。2 つ目は機能しませんが、JugglingDB のドキュメントによると、この方法で実行できます。

どちらを使用する必要がありますか? 2番目のものがうまくいかないのはなぜですか?

更新: これは、2番目のものを使用したときに発生するエラーです:

Express
500 TypeError: Cannot call method 'all' of undefined in products controller during "index" action

at Object.index (C:\Users\Eran\Documents\Relay Foods\nutrition-facts-editor\app\controllers\products.js:47:13)
at Array.2 (C:\Users\Eran\Documents\Relay Foods\nutrition-facts-editor\node_modules\compound\node_modules\kontroller\lib\flow-control.js:150:28)
at ActionContext.run [as innerNext] (C:\Users\Eran\Documents\Relay Foods\nutrition-facts-editor\node_modules\compound\node_modules\kontroller\lib\flow-control.js:103:31)
at Controller.BaseController.next (C:\Users\Eran\Documents\Relay Foods\nutrition-facts-editor\node_modules\compound\node_modules\kontroller\lib\base.js:107:22)
at Controller.protectFromForgery (C:\Users\Eran\Documents\Relay Foods\nutrition-facts-editor\node_modules\compound\node_modules\kontroller\lib\helpers.js:76:21)
at Object.protectFromForgeryHook (C:\Users\Eran\Documents\Relay Foods\nutrition-facts-editor\app\controllers\application.js:3:13)
at Array.1 (C:\Users\Eran\Documents\Relay Foods\nutrition-facts-editor\node_modules\compound\node_modules\kontroller\lib\flow-control.js:150:28)
at run (C:\Users\Eran\Documents\Relay Foods\nutrition-facts-editor\node_modules\compound\node_modules\kontroller\lib\flow-control.js:103:31)
... snip ...
4

1 に答える 1

1

describeと同じだと思いますdefine。ここでの問題は、最初の実装ではグローバルで、2 番目の実装ではローカルである使用範囲です。したがって、アプリケーションの残りの部分を操作するには、グローバルにする必要があります。

于 2013-04-28T17:35:22.387 に答える