如何动态确定mongo写入问题

时间:2015-02-19 18:29:21

标签: javascript node.js mongodb mongoose

我正在使用mongoose连接到mongo数据库:

var options = {
    db: {
        w: 2, /* replica acknowledged */
        readPreference: 'nearest'
    }
}

mongoose.connect('mongodb://localhost:27017/some_db', options);

在我的开发环境中,不会复制这个mongodb,当写入关注点设置为2时会导致错误发生:

cannot use 'w' > 1 when a host is not replicated

然而,在生产中它将被复制,所以我需要这个设置。我想我需要一种方法来确定我连接的mongo是否被复制,如果是,则将写入关注点设置为2(如上所述)。

我可以使用的一个解决方案是节点驱动程序replSetGetStatus,然后检查返回的错误是否表明mongo未被复制。

这感觉真的很脏,有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:3)

您应该在process.env中设置一个变量,具体取决于您的应用程序是在开发模式还是生产模式下运行,如果等于'production',则将写入关注设置为2,否则默认为1。

var options = {
    db: {
        w: process.env.NODE_ENV === 'production' && 2 || 1,
        readPreference: 'nearest'
    }
}

mongoose.connect('mongodb://localhost:27017/some_db', options);