每当我运行我的应用程序时。几秒钟后我收到错误消息。
MongooseError: Operation users.insertOne() buffering timed out after 10000ms
这是我用来连接数据库的代码
const mongoose = require("mongoose");
const express = require("express")
const app = express()
app.use(express.static("views"))
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
mongoose.set("strictQuery", false);
mongoose.connect("mongodb://localhost/newsletter", { useNewUrlParser: true });
const User = require("./User");
// app.use(User)
app.post("/addUser", (req, res, next) => {
console.log("reqeuest recieved")
console.log(req.body)
const name = req.body.name;
const email = req.body.email;
saveUser(name, email)
// Make the user go to the database here
res.redirect("/")
next()
})
app.post("/getEmails", (req, res, next) => {
res.end("im getting emails")
next()
})
async function saveUser(name, email) {
// before adding to the database, see if it already exists
// if (await User.findOne( { name: name } )){
// console.log("not adding to the database")
// return;
// }
console.log("req recieved")
const user = await User.create({
name: name,
email: email
})
await user.save()
console.log(user);
}
app.listen(3000, () => {
console.log("Listening")
})```
我连接到数据库后调用了架构。我尝试使用在命令提示符中键入 mongosh 获得的链接。这可行,但我想使用 loacl 主机。
尝试连接:
mongoose
.connect('mongodb://127.0.0.1:27017/newsletter', { useNewUrlParser: true })
.catch((e) => {
console.log(e);
process.exit(0);
});
此外,如果您使用
await user.save()
创建新实例,则无需调用 User.create()
。
您必须指定端口
mongoose.connect("mongodb://localhost/newsletter", { useNewUrlParser: true });
喜欢:
mongoose.connect("mongodb://localhost:27017/newsletter", { useNewUrlParser: true });
您的客户端可能未连接到数据库
我在使用 findOne() 时遇到了同样的错误。我在 github 操作的容器中运行 mongodb,但错误具有误导性。我通过输入错误的主机名和用户名/密码进行测试。这并没有改变错误消息。所以我得出的结论是我的主机名不正确。找到正确的主机名后,我立即收到身份验证错误,没有 10 秒的延迟。