我在使用 Mongoose 5.12.12 时遇到问题,每当我在 chrome 上访问 express 服务器时,我都会遇到
MongooseError: Operation `users.findOneAndUpdate()` buffering timed out after 10000ms
我已连接到我的数据库,因为在控制台中我得到“已连接到数据库”,但仅此而已。我登录,它给了我上面的错误。我对 mongoose 包很陌生,我正在关注 youtube 教程
这是我的代码,src/app.js
require('dotenv').config();
mongoose.createConnection(process.env.DATABASE_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(connection => {
console.log("Connected to database")
})
mongoose.set("useFindAndModify", false)
这是用户架构:
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema( {
discordId: {
type: String,
required: true,
unique: true,
},
discordTag: {
type: String,
required: true
},
avatar: {
type: String,
required: true
},
guilds: {
type: Array,
required: true,
}
})
module.exports = mongoose.model("User", UserSchema);
这里是 src/strategies/discord.js
passport.serializeUser((user, done) => {
done(null, user.discordId)
});
passport.deserializeUser(async (discordId, done) => {
try {
const user = await User.findOne( {discordId} );
return user ? done(null, user) : done(null, null)
} catch (err) {
console.log(err);
done(err, null);
}
})
passport.use(new DiscordStrategy({
clientID: process.env.DASHBOARD_CLIENT_ID,
clientSecret: process.env.DASHBOARD_CLIENT_SECRET,
callbackURL: process.env.DASHBOARD_CALLBACK_URL,
scope: ['identify', 'guilds'],
}, async (accesToken, refreshToken, profile, done) => {
const { id, username, discriminator, avatar, guilds} = profile;
try {
const findUser = await User.findOneAndUpdate({discordId: id}, {
discordTag: `${username}#${discriminator}`,
avatar,
guilds,
}, {new: true});
if (findUser) {
console.log('user was found')
return done(null, findUser);
} else {
const newUser = await User.create({
discordId: id,
discordTag: `${username}#${discriminator}`,
avatar,
guilds,
})
return done(null, newUser)
}
} catch (err) {
console.log(err);
return done(err, null)
}
}))
答案 0 :(得分:0)
试试这个
const mongoose = require('mongoose');
require('dotenv').config();
const connectToMongo = async() => {
await mongoose.connect(process.env.DATABASE_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
});
return mongoose;
};
await connectToMongo().then(async() => console.log('connected yeee'));
这应该有效,因为您的模型在建立连接之前被调用。您需要将 async/await 与 connect() 或 createConnection() 一起使用;或使用 .then()