1. 安装依赖
确保你安装了 mongoose
和 dotenv
:
npm install mongoose dotenv
2. 配置环境变量
在项目根目录下创建两个环境变量文件:.env.development
和 .env.production
。
.env.development
MONGODB_URI=mongodb://localhost:27017/development_db
.env.production
MONGODB_URI=mongodb://localhost:27017/production_db
3. 修改 next.config.js
确保 next.config.js
文件中使用 dotenv
来加载环境变量:
// next.config.js
const { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } = require('next/constants');
const dotenv = require('dotenv');
module.exports = (phase) => {
if (phase === PHASE_DEVELOPMENT_SERVER) {
dotenv.config({ path: '.env.development' });
} else if (phase === PHASE_PRODUCTION_BUILD) {
dotenv.config({ path: '.env.production' });
}
return {
env: {
MONGODB_URI: process.env.MONGODB_URI,
},
};
};
4. 创建数据库连接文件
创建一个文件 src/mongodb.ts
来设置和管理 MongoDB 连接:
// lib/mongodb.ts
import mongoose from 'mongoose';
const MONGODB_URI = process.env.MONGODB_URI as string;
if (!MONGODB_URI) {
throw new Error(
'Please define the MONGODB_URI environment variable inside .env.development or .env.production'
);
}
/**
* Global is used here to maintain a cached connection across hot reloads
* in development. This prevents connections growing exponentially
* during API Route usage.
*/
let cached = (global as any).mongoose;
if (!cached) {
cached = (global as any).mongoose = { conn: null, promise: null };
}
async function dbConnect() {
if (cached.conn) {
return cached.conn;
}
if (!cached.promise) {
const opts = {
bufferCommands: false,
};
cached.promise = mongoose.connect(MONGODB_URI, opts).then((mongoose) => {
return mongoose;
});
}
cached.conn = await cached.promise;
return cached.conn;
}
export default dbConnect;
5. 启动 Next.js 应用
根据环境来启动你的应用:
开发环境
npm run dev
生产环境
npm run build
npm start
总结
使用不同的 .env
文件来存储环境变量,并在 next.config.js
中加载相应的文件,从而在不同的环境中连接到不同的数据库。