我正在学习 MERN 堆栈开发,当我尝试通过 .env 文件连接数据库时,一切正常。这是我的数据库字符串的样子:
MYDATABASE_String="mongodb+srv://avnish:avnish@cluster0.ojaf1.mongodb.net/registeredUsers?retryWrites=true&w=majority"
当我尝试注册用户时它工作正常,他们在registeredUsers 下。但是现在,我也在实现博客部分,所以当我发布一个新博客时,它会在registeredUsers 下。
现在我想知道如何动态创建一个新数据库,以便它转到 blogContent 数据库而不是registeredUsers 数据库。
这是我的 server.js 的样子:
const express = require('express');
const mongoose = require('mongoose')
const app = express();
const dotenv = require('dotenv')
const routesURLs = require('./routes/routes')
const registerRouter = require('./routes/register')
const loginRouter = require('./routes/login')
const blogRouter = require('./routes/blog')
const cors = require('cors')
dotenv.config()
mongoose.connect(process.env.DATABASE_ACCESS,{
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex:true
},()=>console.log(
'database connected successfully'),
)
app.use(express.json())
app.use(cors())
app.use('/',routesURLs)
app.use('/register',registerRouter)
app.use('/publish',blogRouter)
app.listen(4000, () => {
console.log(`Server started on port`);
});
这是我的博客架构:
const mongoose = require('mongoose')
const blogModel = new mongoose.Schema({
title:{
type:String,
required:true,
},
category:{
type:String,
required:true,
},
slug:{
type:String,
required:true,
},
description:{
type:String,
},
content:{
type:String,
required:true
},
featuredImage:{
type:String,
},
publishedAt:{
type:Date,
default:Date.now
}
})
module.exports = mongoose.model('blog',blogModel)
这是我的 blog.js
const { response, request } = require('express');
const express = require('express');
const router = require('express').Router();
const blogModel = require('../models/Blog')
router.post('/',async (req,res)=>{
const blogArticle = new blogModel({
title:req.body.title,
description:req.body.description,
category:"haha",
slug:"some-thing-here",
content:req.body.description,
})
blogArticle.save().then(data=>{
res.json({
data:data,
message:"Hurray all done"
})
}).catch(error=>{
res.json({
error:error,
message:"Lol! Nothing works"
})
})
})
module.exports = router;
注意 当我从 mydatabase 字符串中删除 registeresUsers 时,每个数据都会进入测试数据库。
答案 0 :(得分:1)
虽然我不同意每种类型的文档都应该有一个完整的数据库,但我将解释如何处理这种情况。
mongoose
在 db
级别处理连接,而 Mongodb 允许单个连接具有多个数据库,但此处并非如此。
这意味着您必须创建另一个 mongoose
实例并连接到另一个数据库。这也意味着您可以再为无默认连接执行 require('mongoose')
,因为这将是一个不同的 mongoose
实例。我建议创建一个单例来按需提供连接来处理这个问题。
我还要补充一点,mongoose
对于这个用例非常不方便,我建议您重新考虑对另一个数据库的实际需求。