本地mongo连接出错,在生产环境中用Vercel工作的想法

问题描述 投票:0回答:1

我遇到一个问题,我的 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 next.js mongodb-query vercel next.js13
1个回答
0
投票

我欠你我的谢意。 您问题中的代码解决了我在 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 而不是中间实例。

Youtube 链接

© www.soinside.com 2019 - 2024. All rights reserved.