[在正常工作时,通常不问问题,但这很好。我正在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数据库,它怎么知道它必须使用我在索引中建立的连接?
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上多个连接的更多信息,>