我正在使用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未被复制。
这感觉真的很脏,有没有更好的方法来解决这个问题?
答案 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);