在Nuxt3中使用DocumentDB(MongoDB)的方法
由于在Nuxt3的服务器上连接AWS的DocumentDB遇到了一些困难,所以我将分享一种在我的环境中成功运行的方法。
规格
在本地连接MongoDB,在AWS上连接DocumentDB。
本地环境:Docker、MongoDB、Nuxt3
AWS云平台:ECS Fargate、DocumentDB、Nuxt3
代码
import mongoose from 'mongoose';
import fs from 'fs';
import path from 'path';
const connection: {
isConnected: any;
db: mongoose.Connection | undefined;
} = {
isConnected: false,
db: undefined,
};
async function connectDB() {
if (connection.isConnected) {
return connection.db;
}
let db = undefined;
console.log('connecting');
const username = encodeURIComponent(process.env.MONGODB_USERNAME || '');
const password = encodeURIComponent(process.env.MONGODB_PASSWORD || '');
const host = process.env.MONGODB_HOST;
if (process.env.IS_DEV) {
db = await mongoose.connect(`mongodb://${host}/`, {
"authSource": "admin",
"user": username,
"pass": password,
});
} else {
const caBundlePath = path.resolve(process.cwd(), './public/rds-combined-ca-bundle.pem');
try {
db = await mongoose.connect(`mongodb://${username}:${password}@${host}/`, {
tls: true,
sslValidate: true,
tlsCAFile: caBundlePath,
replicaSet: 'rs0',
readPreference: 'secondaryPreferred',
retryWrites: false,
});
console.log('MongoDB Connected');
} catch (err) {
console.log('MongoDB Connection Error: ', err);
}
}
if (!db) return;
console.log('connected');
connection.isConnected = db.connections[0].readyState;
connection.db = db.connections[0].useDb('YOUR_DB_NAME');
return connection.db;
}
export default connectDB;
将pem文件放置
请使用TLS进行认证以支持DocumentDB。
将rds-combined-ca-bundle.pem文件放置在公共目录中。
具体下载方法如下所示。
$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
最后
TLS认证花了好长时间…