我正在使用 nextjs 14 开发一个待办事项列表项目,当我创建该项目时,它运行良好。所有 CRUD 功能都运行良好。我是 nextJs 和后端工作的新手。现在我想再次处理我的项目,但无法连接到我的数据库。我正面临这个问题:
MongooseServerSelectionError:无法连接到 MongoDB Atlas 集群中的任何服务器。一个常见原因是您尝试从未列入白名单的 IP 访问数据库。确保您当前的 IP 地址位于 Atlas 集群的 IP 白名单中:https://www.mongodb.com/docs/atlas/security-whitelist/
我已在网络访问中删除并再次添加我的 IP 地址,并且我已允许从任何地方进行访问。但我仍然面临同样的问题,我尝试解决这个问题的所有方法都没有解决它
这是我的代码,以便您可以更好地了解我的问题:
-- db.js --
import mongoose from 'mongoose';
export const connect = async () => {
try {
mongoose.connect(process.env.MONGO_URI)
mongoose.connection.on('connected', () => {
console.log("Connected to database")
})
} catch (error) {
console.log("Faileed to connect to database", error)
}
}
-- model.js --
import mongoose from "mongoose";
const TodoSchema = new mongoose.Schema({
id: {
type: String,
required: true,
unique: true
},
desc: {
type: String,
required: true
},
completed: {
type: Boolean,
default: false
},
category: {
type: String,
required: true
},
priority: {
type: String,
required: true
}
})
const Todo = mongoose.models.todos || mongoose.model('todos', TodoSchema);
export default Todo;
-- 路线.ts --
import { NextRequest, NextResponse } from "next/server";
import { connect } from "@/dbConfig/db";
import Todo from "@/models/Todo";
import { v4 as uuidv4 } from "uuid";
connect();
export const GET = async (request: NextRequest) => {
try {
const todos = await Todo.find({});
console.log(todos);
return NextResponse.json({
msg: "Founded all todos",
success: true,
todos,
});
} catch (error) {
console.error("Error fetching todos:", error)
return NextResponse.json({ msg: `Issue happened, ${error}` }, { status: 500 });
}
};
export const POST = async (request: NextRequest) => {
try {
const reqBody = await request.json();
const { desc } = reqBody;
console.log(desc);
const newTodo = new Todo({
id: uuidv4(),
desc,
completed: false,
});
const savedTodo = await newTodo.save();
return NextResponse.json({
msg: "Todo created",
success: true,
savedTodo,
});
} catch (error) {
return NextResponse.json({ msg: "Issue happened" }, { status: 500 });
}
};
export const DELETE = async (request: NextRequest) => {
try {
await Todo.deleteMany({})
return NextResponse.json({
msg: "Todos cleared",
success: true,
});
} catch (error) {
return NextResponse.json({ msg: "Issue happened" }, { status: 500 });
}
}`
我正在尝试访问我的数据库,并能够获取我的待办事项、编辑它们、清除它们或编辑它们
解决方案: