我正在next.js中构建一个web应用程序,并将其托管在Vercel上。我在MongoDB Atlas中建立了一个数据库集群,我可以在开发中(从localhost(和MongoDB compass连接到该集群,但当我将其部署到Vercel时,client.connect()
会给我一个HTTP 502错误。
为什么我可以从本地主机连接,但不能从我部署的Vercel应用程序连接?根据Atlas仪表板上的连接说明,我的连接字符串为mongodb+srv://<username>:<password>@testcluster.i2ddc.mongodb.net/data?retryWrites=true&w=majority
。
您是否已将Vercel ip添加到MongoDb面板中网络访问配置的白名单中?您可以尝试添加中间件进行连接,并捕获任何错误。我也会尝试不使用";retryWrites=true";在连接字符串中。
中间件
import { MongoClient } from 'mongodb';
const client = new MongoClient(process.env.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
export default async function database(req, res, next) {
if (!client.isConnected()) await client.connect();
req.dbClient = client;
req.db = client.db(process.env.DB_NAME);
await setUpDb(req.db);
return next();
}
你只需要设置环境变量。本教程可能对有用