Mongoose连接在Express.js应用程序中自动共享

Luc*_*rzi 2 javascript mongoose mongodb node.js express

我正在使用Express.js和Mongodb(以及用于使用Schemas访问数据库的mongoose模块)开发RESTful API.我一直在寻找在整个Express应用程序中共享Mongo数据库连接的最佳方式,以便不为每个请求建立新的连接(Web建议和Stackoverflow上的其他答案).我已经阅读了不同的解决方案,我决定尝试使用这种架构:

server.js(主应用程序文件)中我有这样的事情:

var express = require("express");
var bodyParser = require("body-parser");
var logger =  require("morgan");
var configuration = require("./configuration.js");
var fs = require("fs");
var HTTPresponses = require("./responses.js"); 
var mongoose = require("mongoose");

require("./models/user_model.js");

var Users = mongoose.model("Users");

//Connect to Db 
mongoose.connect("mongodb://127.0.0.1/test");

//Rest of the code here
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我使用mongoose创建了与数据库的新连接,然后我需要user_module,如下所示:

var UserSchema = new Schema({
    name : {type: String},
    surname : {type: String},
    username : {type: String, unique: true, required: true}     
    }

,{
    collection : "Users"
});

mongoose.model("Users", UserSchema);
Run Code Online (Sandbox Code Playgroud)

这样,UserSchema直接在mongoose对象中编译.

现在是问题:我注意到在server.js中编译的每个模型以及与db的连接都可以在我使用的每个中间件中获得,只需要mongoose模块"..." 为什么它可以工作?"

所以...如果我有一个需要访问数据库的中间件,我唯一需要做的就是需要moongose模块和我需要简单调用的retreive模型:

var MY_MODEL = mongoose.model("NAME_OF_THE_MODEL_COMPILED_in_serve.js");
Run Code Online (Sandbox Code Playgroud)

我认为这是一件好事,但我不知道它为什么会起作用.我的意思是......我已经阅读了很多问题和答案,谈论了获得这个结果的最佳方法,但我从未读过这种方式.

我还阅读了有关Express.js的文档......但没有.

它可能与Express的缓存系统有关吗?

它是一种跨Express App共享数据库连接的安全方式吗?

提前致谢,

卢卡

vla*_*zam 8

作为server.js应用程序的主要入口点,这是节点看到所需mongoose模块的第一个位置.

mongoose模块实例的任何更新都会反映在该特定实例中.

例如,如果您mongooseserver.js文件和user.js模型文件中需要,则只会对同一mongoose对象进行更改.

这是因为CommonJS模块在整个应用程序中的缓存方式.

如果您想了解有关模块缓存方式的更多信息,我建议您使用以下两个来源: