0

私は典型的なNode.js、express、mongoDB、mongooseアプリケーションを持っています。mongoose-observerライブラリを使用しているときにMissingSchemaErrorが発生する

私はmongoose-observerライブラリを実装して、mongodbの変更をリッスンしています。 参照サイト:https://www.npmjs.com/package/mongoose-observer

このコード(ほぼ正確に提供された例のように)追加する場合:

mongooseObserver.register('MessageModel', 'create', function(newMessage) { 
    console.log("New Message!"); 
    console.log(newMessage); 
}); 

を私は次のエラーを取得する:

node_1  | /home/app/chat/node_modules/mongoose/lib/index.js:362 
    node_1  |  throw new mongoose.Error.MissingSchemaError(name); 
    node_1  |  ^
    nodered_1 | 28 Mar 07:32:11 - [info] Starting flows 
    mongo_1 | 2017-03-28T07:32:04.562+0000 I NETWORK [thread1] waiting for connections on port 27017 
    node_1  | MissingSchemaError: Schema hasn't been registered for model "MessageModel". 
    node_1  | Use mongoose.model(name, schema) 
    node_1  |  at Mongoose.model (/home/app/chat/node_modules/mongoose/lib/index.js:362:13) 
    node_1  |  at registerPre (/home/app/chat/node_modules/mongoose-observer/index.js:9:27) 
    node_1  |  at Object.register (/home/app/chat/node_modules/mongoose-observer/index.js:38:9) 
    node_1  |  at module.exports (/home/app/chat/app/routes.js:35:22) 
    node_1  |  at Object.<anonymous> (/home/app/chat/server.js:83:24) 
    node_1  |  at Module._compile (module.js:409:26) 
    node_1  |  at Object.Module._extensions..js (module.js:416:10) 
    node_1  |  at Module.load (module.js:343:32) 
    node_1  |  at Function.Module._load (module.js:300:12) 
    node_1  |  at Function.Module.runMain (module.js:441:10) 
    node_1  |  at startup (node.js:134:18) 
    node_1  |  at node.js:962:3 
    mongo_1 | 2017-03-28T07:32:11.604+0000 I NETWORK [thread1] connection accepted from 172.25.0.1:51800 #1 (1 connection now open) 

マングースを追加するとき、このエラーはのみ発生-observerコードは、うまく動作しません。

var mongooseObserver = require('mongoose-observer'); 
var mongoose   = require('mongoose'); 
var bcrypt   = require('bcrypt'), 
    SALT_WORK_FACTOR = 10; 

mongoose.connect('mongodb://mongo:27017/LoRaMessages'); //database name 

var messageSchema = mongoose.Schema({ 
    DevEUI: String, 
    LoRaPayload: String, 
    Header: String, 
    Longitude: Number, 
    Latitude: Number, 
    PDOP: Number, 
    TMG: Number, 
    SOG: Number, 
    Temparature: Number, 
    Time: String, 
    ServerTime: Number, 
    type: String, 
    deviceType: String, 
    batteryLevel: String, 
    JoinedAndBeeperStatus: String, 
    EnabledFlags: Number, 
    AlarmFlags: Number, 
    T_Temp: Number, 
    H_Humi: Number, 
    One_Temp: Number, 
    Two_Temp: Number, 
    _msgid: String   
}); 

var MessageModel = mongoose.model('loramessages', messageSchema); //collection name 

mongooseObserver.register('MessageModel', 'create', function(newMessage) { //it fails on this line 
    console.log("New Message!"); 
    console.log(newMessage); 
}); 

関連するかもしれない

他のコードは、私はこのライブラリは、多くの人々によって使用されていない知っているが、たぶん私は何かを明らかに不足しています。

私はこのエラーを含む他の投稿を見ましたが、これは特定のライブラリコードを実装するときにのみ発生するため、別の問題があるようです。

何か助けていただければ幸いです。

編集: @ Love-Keshの答えは正しいのですが。私はこのライブラリがNode.jsからの変更をリッスンするためだけであることを知りました。外部で追加されたデータは検出されません。

+0

があなたのObserver.register関数が定義されたスキーマの後に実行していることを確認した場合

//は試してみてくださいスキーマファイルは、この関数の前に実行されていることを意味します。 –

+0

@ Love-Keshあなたのコメントをありがとう。しかし、「走っている」とはどういう意味ですか?私は、オブザーバ関数を定義する前にスキーマとモデルを定義しました。 – Jan

+1

そうでした。 Observer.registerの 'MessageModel'の代わりに 'loramessages'を渡します。 –

答えて

1

パス「loramessages」の代わりにObserver.register

あなたは新しいアイテムを作成するために、保存を使用している場合に「MessageModel」は、それが発生しません、Model.createは({})新しいレコードを作成するために使用してください。そこに利用できる割引イベントリスナー

Observer.register('loramessages', 'save', function(createdUser){ 
    // this callback will be executed when a new user is created 
    // Do something here, for example, send a email to the created user 
    }); 
+0

はそこで利用できるセーブリスナーであるか、Model.create()@Janを使用して作成した –

+0

利用可能な「保存」リスナーはありませんが、新しい文書が保存されると「作成」が発生します。このライブラリは私の初期の問題を解決するものではありません。私のデータは外部から追加されたものです(node.jsからではありません)。 – Jan

+0

"保存"はライブラリが提供するオプションではないので、 "保存"を "作成"に変更できますか? – Jan

関連する問題