这种方法在
问题在于如果原来的
如果我再次运行
同样,如果我运行
我在这里做错了什么?我按照规定使用回调函数,不是吗?
编辑:
但它仍然读取旧值。
Node服务器
上运行。const express = require("express");
const app = express();
const fs = require("fs");
const connectDb = require("./config/db");
const __init__ = (local = false) => {
fs.writeFile(
"./config/default.json",
`{
"mongoURI": ${
local
? `"mongodb://127.0.0.1:27017/test"`
: `"mongodb+srv://admin:<password>@abc-xxghh.mongodb.net/test?retryWrites=true&w=majority"`
}
}`,
function(err) {
if (err) {
return console.log(err);
}
connectDb();
}
);
};
__init__(true);
问题在于如果原来的
mongoURI: 127.0.0.1:27017
,并且我执行__init__(false)
,则Node将尝试连接到127.0.0.1:27017
,但实际上应该连接到+srv
URI。如果我再次运行
__init__(false)
,那么它将连接到适当的链接。同样,如果我运行
__init__(true)
,它将连接到srv+
而不是本地,如果我再次运行__init__(true)
,那么它才会连接到本地。我在这里做错了什么?我按照规定使用回调函数,不是吗?
编辑:
//config/db
// for mongoDB connection
const mongoose = require("mongoose");
// require the directory
const config = require("config");
// get all contents of JSON file
const db = config.get("mongoURI");
const connectDb = async () => {
try {
console.log("connecting to mongodb", db);
await mongoose.connect(db, {
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true
});
console.log("Mongo DB connected");
} catch (err) {
console.log("unable to connect to mongodb");
console.log(err.message);
//exit if failure
process.exit(1);
}
};
module.exports = connectDb;
我甚至尝试了以下操作:
.....
console.log("Developing locally:", local);
// require the directory
const config = require("config");
// get all contents of JSON file
const db = config.get("mongoURI");
connectDb(db);
.....
但它仍然读取旧值。
./config/db
。我认为这是在启动时执行 require,所以在写入文件之前读取它。 - Manuel Spigolon