使用 mongoose-observer 库时出现 MissingSchemaError

Posted

技术标签:

【中文标题】使用 mongoose-observer 库时出现 MissingSchemaError【英文标题】:MissingSchemaError while using mongoose-observer library 【发布时间】:2017-08-21 05:06:06 【问题描述】:

我有一个典型的 Node.js、express、mongoDB 和 mongoose 应用程序。

我正在尝试实现 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)

此错误仅在添加 mongoose-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 内部的变化,没有检测到外部添加的数据。

【问题讨论】:

确保您的 Observer.register 函数在模式定义之后执行意味着模式文件在此函数之前运行。 @Love-Kesh 感谢您的评论。但是你所说的“跑步”是什么意思?在定义观察者函数之前,我已经定义了模式和模型。 是的,你做到了。在 Observer.register 中传递“loramessages”而不是“MessageModel” @Love-Kesh 解决了错误,谢谢!下一个问题:它没有做它应该做的事情。向数据库添加新消息时,不会触发观察者功能。这应该是一个新的 SO 问题吗? 【参考方案1】:

在 Observer.register 中传递“loramessages”而不是“MessageModel”

如果你使用 save 创建新项目,它不会触发,请使用 Model.create() 创建新记录。

//如果那里有Save事件监听器试试

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
  );

【讨论】:

是那里可用的保存侦听器或您使用 Model.create() @Jan 创建的 没有可用的“保存”侦听器,但在保存新文档时会触发“创建”。这个库没有解决我最初的问题,因为我的数据是从外部添加的(不是从 node.js 中添加的)。 由于库不提供“保存”选项,您能否将“保存”更改为“创建”?

以上是关于使用 mongoose-observer 库时出现 MissingSchemaError的主要内容,如果未能解决你的问题,请参考以下文章

编译共享库时出现链接错误

使用 openCV 库时出现必需品错误

尝试安装和使用 LAPACK++,加载共享库时出现问题

使用 PDF 查看器库时出现空指针异常

使用 Android 库 (AAR) 时出现 AndroidRuntime 错误 ClassNotFoundException

使用 Tomcat 运行带有外部库的应用程序时出现 NoClassDefFoundError