它如何在不将数据库传递给架构的情况下知道它的地址?

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

[在正常工作时,通常不问问题,但这很好。我正在Nuxt应用程序中使用与Mongodb的连接。

声明数据库地址的唯一位置在index.js

const express = require('express');
const mongoose = require('mongoose');

const apiRouter = require('./apiRouter');

const app = express();
app.use(express.json());
mongoose.connect('mongodb://localhost/sun-v2', {useNewUrlParser: true})

app.use(apiRouter);

module.exports = {
   path: '/server',
   handler: app
}

如您所见,猫鼬对象未导出。在我的[[apiRouter.js中,模型是必需的,并且可以正常运行:

const express = require('express'); const PlayerModel = require('./models/player'); const app = express(); app.get('/players', async (req, res) => { const players = await PlayerModel.find({}); try { res.send(players); } catch (error) { res.status(500).send(error); } });
我不明白,如果路径和连接都未导出,Model.find()如何知道在哪里搜索数据库。

如果我有多个数据库地址,该如何选择要使用的连接?我有多个开放的mongo数据库,它怎么知道它必须使用我在索引中建立的连接?

node.js mongodb express mongoose nuxt.js
1个回答
1
投票
当您使用mongoose.connect()时,猫鼬在内部创建一个连接并将其设置为“默认连接”。这在大多数情况下都是很方便的。

如果需要多个连接,则必须使用方法mongoose.createConnection()(这是mongoose.connect()在后台使用的方法)手动创建它们。

const conn = mongoose.createConnection("mongodb://localhost/sun-v2", { useNewUrlParser: true });

尽管有一个警告,但您不能再简单地导出

models。您必须改为导出schemas,以便可以为每个连接创建单独的模型。您的情况将是这样的:

const express = require('express'); const mongoose = require('mongoose'); // Export your schema instead your model const PlayerSchema = require('./models/player'); const app = express(); const conn1 = mongoose.createConnection("mongodb://localhost/sun-v2", { useNewUrlParser: true }); const conn2 = mongoose.createConnection("mongodb://anotherhost/sun-v2", { useNewUrlParser: true }); // ... const PlayerModel1 = conn1.model('User', PlayerSchema); const PlayerModel2 = conn2.model('User', PlayerSchema); // ... app.get('/players', async (req, res) => { const playersFromConn1 = await PlayerModel1.find({}); const playersFromConn2 = await PlayerModel2.find({}); // ... });
您可以查看Mongoose文档以获取有关https://mongoosejs.com/docs/connections.html#multiple_connections上多个连接的更多信息,>
© www.soinside.com 2019 - 2024. All rights reserved.