【问题标题】:Share database connection among multiple routes? [duplicate]在多条路由之间共享数据库连接? [复制]
【发布时间】:2014-08-19 02:04:15
【问题描述】:

我基于Expressroute-separation 示例创建了一个非常简单的Node.js 应用程序。我想用MongoDB 驱动程序Mongoose 为这个应用程序供电。这个例子只列出了UsersKittens

var express = require('express');
var app = express();
var mongoose = require('mongoose');
var user = require('./user');
var kitten = require('./kitten');

// Connect MongoDB
mongoose.connect('mongodb://localhost/mongoose');

// Express config here
...

// User
app.all('/users', user.list);

// Kitten
app.all('/kittens', kitten.list);

// Mongoose connection
var db = mongoose.connection;
db.once('open', function callback () {
  var kittySchema = mongoose.Schema({ name: String });
});

if (!module.parent) {
  app.listen(3000);
  console.log('Express started on port 3000');
}

对我来说,在启动时而不是每次请求时连接到 Mongo 数据库似乎是明智之举。

但是我如何与 userkitten 路由共享 Mongoose 连接?我知道如果我不需要共享两者之间的连接,我可以在我的user.jskitten.js 代码中连接到数据库。

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    node.js 中,当您对文件执行require 时,您只运行一次 该文件中的代码。这意味着你可以通过闭包来存储东西。

    foobardb.js

    (function(){
      "use strict"; // always nice to have
    
      var mongoose = require('mongoose'),
          databaseConnection; 
    
      module.exports = function() {
    
          if ( !databaseConnection ) {
               mongoose.connect('mongodb://localhost/mongoose')
               databaseConnection = mongoose.connection;
          }
    
          (...)
      };
    
    })();
    

    databaseConnection 将与您所做的所有require("foobardb.js"); 共享

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2015-04-22
      相关资源
      最近更新 更多