Express 3.x と mongoose 3.6.4 を使用しています。
これまでのところ、エクスプレスapps.jsファイルで次のようにマングース接続を作成しています。
var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/mytest');
次に、次のように、モデルをモデル/ユーザーなどの個別のファイルに分割しました。
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;
var userSchema = new Schema({
userId: ObjectId,
givenName:String ...
});
exports.User = mongoose.model('User', userSchema);
そして、複数のルーティング ファイルで、次のように User モデルを使用しました。
var User = require('./models/user').User;
User.findById(id, function(err, user){ ...
これは、ローカル開発にうまく機能しています。すべてのモデルが同じ接続を共有します。
しかし、今は mongoose.createConnection() を使用して、同様の方法で使用できる接続プールを作成したいと考えています。アプリの起動時に接続プールを確立し、すべてのモデルでプールを使用したいと考えています。だから、私はこれを試しました:
var conn = mongoose.createConnection("localhost","dpatest", 27017,{user:"???",pass:"???"});
ただし、モデルは自動的に接続を共有しません。そのため、接続をエクスポートしてモデルで使用しようとするなど、さまざまなことを試しました。ただし、モデルごとに個別の接続を設定する以外は何も機能していません。
mongoose.createConnection() を使用して単一の接続プールを作成する方法を誰かが説明できますか?
私の質問の詳細は次のとおりです。
/************ app.js *****************/
var http = require('http');
var path = require('path');
var express = require('express');
//these are my routing files
var auth = require('./src/auth');
var profile = require('./src/profile');
var admin = require('./src/admin');
var tx = require('./src/tx');
var system = require('./src/system');
var servicing = require('./src/servicing');
var dbUri;
var dbUser = "?????";
var dbPass = "?????";
//here are my configurations for development and production
app.configure('development', function(){
app.set('port', 3460);
app.use(express.errorHandler());
dbUri = "mongodb://mongodb://127.0.0.1:27017/dpatest";
});
app.configure('production', function(){
app.set('port', 3461);
dbName = 'dpa';
dbUri = "mongodb://"+dbUser+":"+dbPass+"@ds052525.mongolab.com:51437/dpa";
});
/*
this is what I was originally using for development
and want to change for deployment
*/
mongoose.connect(dbUri);
これは私が移動する予定だったものです:
var conn = mongoose.createConnection(dbUri);
私のモデル (5 つの異なるモデル) は、アプリのルートから src/models という名前のディレクトリにあります。たとえば、ユーザー モデル:
/************ user.js *************/
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;
var userSchema = new Schema({
userId: ObjectId,
givenName: String, ...
});
次のようにエクスポートされていました。
exports.User = mongoose.model('User', userSchema);
次に、モデルは次のようにさまざまなルーティング ファイルで使用されます。
/****************auth.js**************/
var User = require('./models/user').User;
exports.createAccount = function(req, res){
var user = new User({});
. . .
user.save(function(err, usr){
});
};
mongoose.connect() を mongoose.createConnection に置き換えて、複数のモジュールで動作させる方法の具体的な例を探しています。セルゲイの答えは有望に見えますが、ルーティング ファイルでモデルを参照する方法がわかりません。私は試した:
var User = require(../models).User
しかし、それを機能させることができませんでした。参照エラーをスローし続けます。
ありがとう!