I have a typical Node.js, express, mongoDB and mongoose application.
I'm trying to implement the mongoose-observer library to listen for changes on my mongodb. See site: https://www.npmjs.com/package/mongoose-observer
When adding this code (almost exactly like the provided example):
mongooseObserver.register('MessageModel', 'create', function(newMessage) {
console.log("New Message!");
console.log(newMessage);
});
I get the following error:
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)
This error only happens when adding the mongoose-observer code, without that is works just fine.
Other code that might be relevant
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);
});
I know this library is not used by a lot of people but maybe i'm missing something obvious.
I have seen the other post containing this error but there seems to be another problem since this only happens when implementing the specific library code.
Any help is appreciated.
EDIT: While @Love-Kesh 's answer was correct. I found out this library is only for listening for changes from within Node.js, externally added data is not detected.
Pass 'loramessages' instead 'MessageModel' in Observer.register
If you are using save to create new item , it won't fire , please use Model.create({}) to create new record.
//Try if Save event listener available there
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
});