Я использую express 3.x и mongoose 3.6.4.
До сих пор я создавал соединение mongoose в моем экспресс файле 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, ...
});
который экспортировался следующим образом:
export.User = mongoose.model('Пользователь', 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
Но он не мог заставить его работать. Он продолжает бросать опорную ошибку.
Спасибо!