3

コード (https://github.com/cmarin/MongoDB-Node-Express-Blog) を見て NodeJS、Express、Mongoose を学習しましたが、「models.js」から「Poll」関数をインポートするのに問題があります。 ' ファイル、特に 'save' 機能。

次のエラーが表示されます。

500 TypeError: Object function (){} has no method 'save'

app.js の 54 行目で発生します。関数が見つからないため、新しい投票を保存できません: https://github.com/kelper/Poll/blob/master/app.js

これが私のモデル ファイルで、save 関数は 62 行目にあります: https://github.com/kelper/Poll/blob/master/models.js

もう 1 つの簡単な質問です。ファイルをコミットから除外するにはどうすればよいですか? 私は自分のレポにスワップファイルなどをコミットし続けています。

私のコードに他に何か問題がある場合は、教えてください。私の命名規則が紛らわしいと 1 人が言ったことを知っています。変数にどのように名前を付ける必要がありますか?

4

2 に答える 2

5

PollModel は関数コンストラクターであり、オブジェクトを作成します。

var PollModel = require('./models').PollModel;間違っている

var pollModel = new (require('./models').PollModel);は正しい。

于 2011-05-27T19:11:25.477 に答える
4

プロトタイプを使用して構築されたプロキシ オブジェクトを取得したようです。この場合、レイノスが述べたように、インスタンスを使用するにはインスタンスを「新しく」する必要があります。

あなたが期待しているのは、プロトタイプのクラスではなく、オブジェクト リテラルが提供するものだと思います。何かのようなもの:

module.exports.PollModel = {
  findPolls  : function (callback) { ... },
  findById   : function (id, callback) { ... },
  updateById : function (id, body, callback) { ... }
}

個人的には、マングース スキーマを直接使用します。

Mongoose は Schema オブジェクトを使用して特定のモデルのクエリを実行しますが、実際にそのスキーマ タイプの新しいオブジェクトを作成して保存する場合は、新しいオブジェクトを作成する必要があります。

// Assume you've exposed the mongoose Poll schema directly
var Poll = require('./models').Poll;

// Create a new instance
var instance = new Poll();

// Valid
instance.save();

// Not valid
instance.find(function(err, docs){});

// Valid
Poll.find(function(err, docs){});

// Not valid
Poll.save();
于 2011-05-27T19:16:35.560 に答える