我遇到一个问题,我的 MongoDB 数据库在生产环境中成功连接,但在本地主机中无法连接。这是我的设置:
后端(lib/mongodb.js):
import { MongoClient } from 'mongodb';
if (!process.env.MONGODB_URI) {
throw new Error('Invalid/Missing environment variable: "MONGODB_URI"');
}
const uri = process.env.MONGODB_URI;
const options = {};
let client;
let clientPromise;
if (process.env.NODE_ENV === "development") {
// If `globalWithMongo` is not already defined, initialize it as an object
if (typeof global.globalWithMongo === 'undefined') {
global.globalWithMongo = {};
}
// Use the `globalWithMongo` object to store the `_mongoClientPromise`
if (!global.globalWithMongo._mongoClientPromise) {
client = new MongoClient(uri, options);
global.globalWithMongo._mongoClientPromise = client.connect();
}
clientPromise = global.globalWithMongo._mongoClientPromise;
} else {
// In production mode, it's best to not use a global variable.
client = new MongoClient(uri, options);
clientPromise = client.connect();
}
export default clientPromise;
前端:
import Head from "next/head";
import clientPromise from "../lib/mongodb";
export const getServerSideProps = async () => {
try {
await clientPromise;
return {
props: { isConnected: true },
};
} catch (e) {
console.error(e);
return {
props: { isConnected: false },
};
}
};
export default function Home({ isConnected }) {
return (
<div className="container">
<Head>
<title>Create Next App</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<main>
{/* Content here */}
{console.log(isConnected)}
<h1>We are in mongo Db vercel page</h1>
<div>
{isConnected ? (
<div style={{ color: "green" }}>You are connected to MongoDB!</div>
) : (
<div style={{ color: "red" }}>
You are not connected to MongoDB.
</div>
)}
</div>
</main>
</div>
);
}
我按照官方 MongoDB 教程视频(链接:https://www.youtube.com/watch?v=JIlYroSsInU&t=8s)并使用 MongoDB 创建了一个示例 Next.js 应用程序。但是,我的实现只能通过 Vercel 运行,不能在本地主机上运行。
我怀疑问题可能出在我如何在
lib/mongodb.js
内以开发模式处理 MongoDB 连接。但我不知道如何解决这个问题。有什么建议吗?
我欠你我的谢意。
您问题中的代码解决了我在 mongodb.js 中的问题
但这里有一个小代码片段可以暂时帮助您。
我将 mongodb.js 文件更改为此内容并且它有效,但尽管我不推荐这样做,因为它解决了表面问题。
import { MongoClient } from "mongodb";
if (!process.env.MONGODB_URI) {
throw new Error('"Invalid/Missing environment variable:"MONGODB_URI"');
}
const uri = process.env.MONGODB_URI;
const options = {};
let client;
let clientPromise;
if (process.env.NODE_ENV === "development") {
//In development mode , use a global variable so that the value
// is preserved across module reloads caused by HMR(Hot Module
Replacement).
client = new MongoClient(uri, options);
clientPromise = client.connect();
}
export default clientPromise;
有关更多信息,请检查文档,因为这是一个临时解决方案,但据我所知,这应该适合您以及直接连接的代码 MongoClient 而不是中间实例。