0

我是一个完整的node.js noobie,并试图找出构建我的应用程序的最佳方法,并将问题分离出来。在node.js中正确分离关注点本身?

我通过猫鼬使用mongodb,并成功地将我的控制器分离出来,使用node.js模块,然后试图分离出我的模型。我已经走了似乎工作,但是当我检查数据库没有保存。另外,我在保存功能中尝试了一个console.log(),并且没有任何记录。

从我server.js我:

app.post(api.urlslug + '/messages', messagesapi.insert); 

然后我有一个/controllers/api/messages.js:

var m = require('../../models/message'); 

exports.index = function(req, res, next){ 
    res.send('all the messages...'); 
} 

exports.insert = function(req, res, next){ 
    var message; 
    message = new m.Message({ 
     messagebody: req.body.messagebody 
    }); 
    message.save(function(err) { 
     console.log('here we are in the save'); 
     if(!err) { 
      return console.log('message created'); 
     } else { 
      return console.log(err); 
     } 
    }); 
    return res.send(message); 
} 

和我/models/message.js看起来像这样:

// required modules 
var mongoose = require('mongoose') 
    , db = require('../models/db'); 

// setup database connection 
mongoose.connect(db.connectionstring()); 

var Message = exports.Message = mongoose.model('Message', new mongoose.Schema({ 
    messagebody: String 
})); 

当我发布到API,我得到一个正确的JSON回来了,它甚至有什么在我看来,作为一个MongoDB的_id的领域提供了唯一的ID。因此,如果它似乎在创建对象并正确与mongodb进行通信,我无法理解为什么它实际上不会进入mongodb。

+0

我不确定乍一看,但我认为你可能在'正确地与mongodb进行通信'时出错了。更有可能它没有与MongoDB沟通,而是Mongoose为你创建了_id(是的,它能够做到这一点,它是Mongo的Objectid规范之美的一部分)。但是,不知道发生了什么问题。你确定'exports.insert'被调用? Moverover,你如何测试'消息'不会持久到MongoDB?最好的检查方法是使用Mongo CLI在任何平台上使用 –

+0

@ Geert-Jan对_id有帮助。这很可能是它猫鼬创建ID。是的,我使用Mongo CLI检查了MongoDB,并没有创建文档。 –

+0

难道你的问题的标题实际上并不是你问的吗?你谈论关注点的分离,但看起来你的问题应该是“为什么我的MongoDB文档没有被保存?” – Pickels

回答

0

听起来好像没有连接。尝试收听默认猫鼬连接的打开/错误事件以找出原因。

function log (msg) { console.log('connection: ', msg) } 
mongoose.connection.on('open', log); 
mongoose.connection.on('error', log);