为什么我的回调无法正常工作?
此方法在node server
运行
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/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
uri时,它将尝试连接到+srv
。
如果再次运行__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);
.....
但是它仍然读取旧值
回答如下:您的本地URL和srv + URL代码正确。我可以看到的问题是方法connectDb();]的位置
fs.writeFile("fir arg - URL", "second -content", third - error fun {});
在函数后的代码中,将connectDb()置于错误提示之后。之后应将其关闭。