Node.js Mongodb、Mongoose链接不同文件中的多个模型
我找了这么多,但似乎找不到适合自己的答案。我正在学习使用Mongoose和NodeJS的Mongodb,但我在不同的文件中有两个独立的模型,即:users.js和posts.js。 我试图让mongodb查询同时进行(因为它们将被链接),但我不想打开多个连接,因为我认为这会浪费生产中的资源。我用多个连接尝试过它,它可以工作(根据文档),但必须有更好的方法来简单地要求每个模式。 帖子Node.js Mongodb、Mongoose链接不同文件中的多个模型,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我找了这么多,但似乎找不到适合自己的答案。我正在学习使用Mongoose和NodeJS的Mongodb,但我在不同的文件中有两个独立的模型,即:users.js和posts.js。 我试图让mongodb查询同时进行(因为它们将被链接),但我不想打开多个连接,因为我认为这会浪费生产中的资源。我用多个连接尝试过它,它可以工作(根据文档),但必须有更好的方法来简单地要求每个模式。 帖子 //jshint esversion: 6 const express = require(`expres
//jshint esversion: 6
const express = require(`express`);
const mongoose = require(`mongoose`);
const bodyParser = require(`body-parser`);
const app = express();
//Initiate body parser
app.use(bodyParser.urlencoded({extended: true}));
//initiate posts db
mongoose.connect("mongodb://localhost:27017/postDB", {useNewUrlParser: true});
//=== SCHEMAS ===//
const postSchema = new mongoose.Schema ({
postTitle: {
type: String,
required:[true, `Must enter a title`],
minlength: [1, `Title must be at least 1 chars`],
maxlength: [120, `Title cannot be more than 120 chars`]
},
postDate: {
type: Date,
required:[false]
},
postBody: {
type: String,
required:[true, `Post must have content`],
minlength: [1, `Content must be at least 1 chars`],
maxlength: [50000, `Content cannot be more than 50,000 chars`]
},
postAuthor: {
type: String,
}
});
Users.js:
const express = require(`express`);
const mongoose = require(`mongoose`);
const bodyParser = require(`body-parser`);
const app = express();
//Initiate body parser
app.use(bodyParser.urlencoded({extended: true}));
//initiate posts db
mongoose.connect("mongodb://localhost:27017/userDB", {useNewUrlParser: true});
//USER SCHEMA//
{SOME STUFF}
server.js
//jshint esversion: 6
//=== DEPENDENCIES ===//
//Application global constants
const express = require(`express`);
const mongoose = require(`mongoose`);
const bodyParser = require(`body-parser`);
const ejs = require('ejs');
const _ = require(`lodash`);
//Initiate Express
const app = express();
module.exports = app;
//Express Routing Requires()
const site = require(`./routes/siteController`);
const user = require(`./routes/userController`);
const post = require(`./routes/postController`);
//=== DEPENDENCY SETTINGS ===//
//Initiate EJS engine
app.set(`view engine`, `ejs`);
app.engine('html', require('ejs').renderFile);
//Initiate body parser
app.use(bodyParser.urlencoded({extended: true}));
//Set express static files
app.use(express.static(`public`));
同时,我正在学习,如果您对代码有任何反馈,我将不胜感激 我现在可以回答我自己的问题了。使用createConnection()mongoose方法将多个数据库链接到一个连接非常简单,当您有多个model.js文件和一个server.js(或main app.js)文件时,事情会变得稍微不寻常 视觉参考的我的文件结构:
-MAIN FOLDER
-controllers
-userController
-staticPagesController
-postsController
-models
server.js //I CONTAIN ALL THE DATABASE AND SERVER CONNECTION TOOLS
posts //I NEED A DB OF MY OWN
users //I NEED A DB OF MY OWN
-public
stylesheets
-views
user
all user ejs files
post
all post ejs files
site
all staticpage ejs files
partials
all partials
-index.js
在server.js文件中,必须创建两个连接(每个db一个),如下所示:
每个model.js文件都有自己的模式,我将使用一个用户作为参考,即:
const userSchema = new mongoose.Schema ({
userName: {
type: String,
required: [true, `Must Enter A Name`]
}
)};
在这里,你必须像这样要求你的server.js文件
const conn1 = require(`/path/to/server`);
现在是令人困惑的部分,它非常微妙,但却带来了所有的不同强>
我们将conn1设置为需要到服务器的路径,以便它可以连接,但我们必须有一个模型供模式使用。我们使用conn1创建具有以下语法的模型:
module.exports = conn1.makeConn1.model(`User`, userSchema);
在这里,我们直接将现在连接的模型及其关联的模式导出到我们需要的任何地方(即:您的控制器或主app.js)。这里微妙的区别在于,我们不是像文档建议的那样创建一个新的mongoose.model,而是使用我们新创建的连接来调用model
module.exports = conn1.makeConn1.model(`User`, userSchema);