【问题标题】:Proper separation of concerns natively in node.js?在 node.js 中适当地分离关注点?
【发布时间】:2012-06-14 19:57:40
【问题描述】:

我完全是 node.js 菜鸟,并试图找出通过适当分离关注点来构建我的应用程序的最佳方法。

我正在通过 mongoose 使用 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,它甚至有 _id 字段,在我看来是 mongodb 提供的唯一 ID。有了这个,如果它似乎正在创建对象并与 mongodb 正确通信,我无法理解为什么它实际上并没有进入 mongodb。

【问题讨论】:

  • 乍一看我不确定,但我认为您在“并正确与 mongodb 通信”方面可能是错误的。更有可能它没有与 MongoDB 通信,而是 Mongoose 为您创建了 _id(是的,它能够做到,它是 Mongo 的 Objectid 规范的一部分)仍然不确定出了什么问题。你确定exports.insert 被调用了吗? Mover,你是如何测试“消息”没有持久化到 MongoDB 的?最好的检查方法是在你碰巧的任何平台上使用 Mongo CLI
  • @Geert-Jan 这在 _id 上是有意义的。那很可能是猫鼬创建了ID。是的,我使用 Mongo CLI 检查了 MongoDB,没有创建任何文档。
  • 会不会是您的问题的标题实际上不是您要问的?您谈到关注点分离,但您的问题似乎应该是“为什么我的 MongoDB 文档没有被保存?”
  • @Pickels 我认为这并不完全准确,因为如果我将所有这些放到一个文件中,它就会很好地写入 MongoDB 服务器。所以,我的问题是当我试图打破适当的关注点分离时。我不知道我是否正确地做那部分。
  • 我自己并不了解 MongoDB,我唯一看到的是您在保存回调之外执行return res.send(message);

标签: model-view-controller node.js mongodb mongoose separation-of-concerns


【解决方案1】:

听起来好像没有建立连接。尝试监听默认 mongoose 连接的打开/错误事件以找出原因。

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

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多