1

私はMongooseをいじっていfindますが、無効なアイテムを保存するときにコールバックが複数回呼び出されていることに気づきました。

persist.js

mongoose.model('ContentTag', new mongoose.Schema({
    content:   requiredString,
    tag:       requiredString
}));

test.js(mochaを使用)

describe('content tag', function() {
    it('should not save an empty content tag', function(done) {
        persist.ContentTag().save(function(err) {
            assert.ok(err);

            persist.ContentTag.find(function(err, items) {
                assert.equal(0, items.length);
                done();
            });
        });
    });

これにより、次のエラー出力が生成されます。

Save err: ValidatorError: Validator "required" failed for path tag
Save err: ValidatorError: Validator "required" failed for path content
Find err: null
Find err: null

そして、次のエラー:

 1) Persist content tag should not save an empty content tag:
     Error: done() called multiple times
      at multiple (/usr/local/lib/node_modules/mocha/lib/runnable.js:168:31)
      at done (/usr/local/lib/node_modules/mocha/lib/runnable.js:174:26)
      at Runnable.run.duration (/usr/local/lib/node_modules/mocha/lib/runnable.js:190:9)
      at persist.ContentTag.content (path/test/server-test.js:21:21)
      at Query.execFind (path/node_modules/mongoose/lib/mongoose/query.js:572:26)
      at Cursor.toArray (path/node_modules/mongoose/support/node-mongodb-native/lib/mongodb/cursor.js:122:15)
      at Cursor.each (path/node_modules/mongoose/support/node-mongodb-native/lib/mongodb/cursor.js:167:11)
      at Cursor.nextObject (path/node_modules/mongoose/support/node-mongodb-native/lib/mongodb/cursor.js:467:28)
      at Cursor.close (path/node_modules/mongoose/support/node-mongodb-native/lib/mongodb/cursor.js:625:17)
      at Cursor.nextObject (path/node_modules/mongoose/support/node-mongodb-native/lib/mongodb/cursor.js:467:10)
      at Cursor.nextObject.commandHandler (path/node_modules/mongoose/support/node-mongodb-native/lib/mongodb/cursor.js:452:15)
      at EventEmitter.emit (events.js:96:17)
      at Db.open.self.serverConfig.connection.addListener.self.state (path/node_modules/mongoose/support/node-mongodb-native/lib/mongodb/db.js:90:12)
      at EventEmitter.emit (events.js:93:17)
      at Connection.open.receiveListener (path/node_modules/mongoose/support/node-mongodb-native/lib/mongodb/connection.js:82:16)
      at Socket.Connection.open.receiveListener (path/node_modules/mongoose/support/node-mongodb-native/lib/mongodb/connection.js:85:16)
      at Socket.EventEmitter.emit (events.js:93:17)
      at TCP.onread (net.js:391:31)

複数の検証エラーがある場合、エラーごとに1回saveコールバックが呼び出されるようです。

キーワードを削除するとnew、次のエラーが発生します。

 1) Persist content tag should not save an empty content tag:
     TypeError: Object #<Object> has no method 'buildDoc'
      at Object.Document (../node_modules/mongoose/lib/mongoose/document.js:26:19)
      at Object.Model (../node_modules/mongoose/lib/mongoose/model.js:24:12)
      at Object.model [as ContentTag]
4

1 に答える 1

1

toのコールバックsaveは、検証ごとに1回呼び出されますerr。したがって、私はdone()何度も電話をかけていました。err振り返ってみると、定義されていることと、find()呼び出しが空になることの両方を主張する意味はありません。

于 2012-12-11T19:43:56.193 に答える