【发布时间】:2021-02-09 01:59:18
【问题描述】:
我有以下代码来修改我的应用程序中的用户帐户:
"use strict";
var mongoose = require("mongoose");
mongoose.set("debug", true);
mongoose.connect(process.env.MONGO_URL, {
auth: {
user: process.env.MONGO_USER,
password: process.env.MONGO_PASSWD,
},
useNewUrlParser: true,
useUnifiedTopology: false,
});
var db = mongoose.connection;
var schema = mongoose.Schema;
var user_schema = new schema(
{
id: { type: String, required: true, unique: true },
username: { type: String, required: true },
name: String,
email: String,
phone: String,
created: Date,
modified: Date,
},
{ strict: false }
);
var query = user.where({ id: user_id }),
user_id = "93", // temporarily hard-coded as an example
user_modified = null,
result = -1; // failure
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function () {
async () => {
await query.findOne(function (err, user) {
if (err) {
console.log(err);
}
if (user) {
user.modified = Date();
user_modified = user;
}
});
if (user_modified) {
try {
let save_user = await user_modified.save();
if (save_user) {
result = 1; // success
}
} catch (err) {
console.log(err);
}
}
console.log(result);
};
});
这假定用户帐户 93 已经在 MongoDB 数据库中创建:
{
"_id": ObjectId("5e7d3c3d0a6467c8b554abf4"),
"id": "93",
"username": "foo",
"name": "bar",
"email": 'baz@mail.com',
"phone": '1234567890',
"created": "2000-01-01 01:10:01.553",
"modified": "2000-01-01 01:10:01.553"
}
我在 us-east-2、eu-west-1 和 ap-southeast-1 的 ec2 实例上运行此代码。我也在美国东部。
这是我的 MongoDB 连接字符串:
MONGO_URL: "mongodb://us-east-2.foo.com:27017,eu-west-1.foo.com:27017,ap-southeast-1.foo.com:27017/bar?authSource=admin&replicaSet=bz0&readPreference=secondary"
当我点击 us-east-2 实例时,它总是为我返回 1(成功)。但是,如果我尝试访问 eu-west-1 或 ap-southeast-1 实例,它会不一致地返回 -1(失败)。
注意:我也经历过使用单个 MongoDB 实例而不是 ReplicaSet 的失败。每当我尝试跨区域连接时,它都会失败。
参考文献:
【问题讨论】:
-
这可能很明显,但是您确定您可以从您的 EU 实例实际连接到您的 MongoDB 吗?
-
是的。让我更新我的示例代码以反映这一点。
标签: javascript node.js mongodb mongoose