express - await - mongoose disconnect
Las consultas se bloquean cuando se usa mongoose.createConnection() vs mongoose.connect() (1)
Trabajos:
var mongoose = require(''mongoose'');
var db = function() {
return {
config: function(conf) {
mongoose.connect(''mongodb://'' + conf.host + ''/'' + conf.database);
var db = mongoose.connection;
db.on(''error'', console.error.bind(console, ''connection error:''));
db.once(''open'', function callback() {
console.log(''db connection open'');
});
}
};
};
module.exports = db();
No funciona:
var mongoose = require(''mongoose'');
var db = function() {
return {
config: function(conf) {
var db = mongoose.createConnection(''mongodb://'' + conf.host + ''/'' + conf.database);
db.on(''error'', console.error.bind(console, ''connection error:''));
db.once(''open'', function callback() {
console.log(''db connection open'');
});
}
};
};
module.exports = db();
Insertar codigo:
''use strict'';
var mongoose = require(''mongoose''),
User = mongoose.model(''User''),
p = require(''../lib/promise'');
...
app.post(''/user'', function (req, res) {
res.format({
json: function () {
//extract the user from the req
try {
var user = new User();
user.firstName = req.body.firstName;
user.lastName = req.body.lastName;
user.userName = req.body.userName;
user.password = req.body.password;
user.email = req.body.email;
user.save(function(err, data) {
//omitted
...
Desafortunadamente, este no es un simple refactor.
1) .createConnection
vs .connect
Al usar .createConnection
, accede a los modelos a través de la conexión explícita que crea con esta llamada.
Esto significa que en lugar de User = mongoose.model(...)
necesita User = db.model(...)
.
Los ejemplos ( one , two , three , four ) muestran que esto no es complicado, pero el cambio es lo suficientemente sutil como para que mucha gente lo pierda . Los documentos no son muy claros en esto tampoco, que es probablemente la causa raíz.
2) su aplicación kraken y .createConnection
Si está construyendo sobre uno de los ejemplos de kraken, tendrá que hacer varios cambios.
- Cambie el código alrededor de
.createConnection
para que pueda acceder al objeto que se devuelve. En la forma actual, está devolviendo un objeto con una funciónconfig
pero no devuelve el objeto de conexión generado por.createConnection
. - Actualice
index.js
si cambia la forma de configurar / crear la conexión endb.config
. Es posible que pueda evitar esto, pero sospecho que reescribirá todo eldb.js
alrededor de la nueva llamada. - Asegúrese de que los códigos / controladores que trabajan con los modelos tengan acceso al objeto que devolvió
.createConnection
. Esto significa tanto una forma de acceder al objeto como cambiar cualquier lugar donde establezca una variable para que use el formatovar xyz = db.model(''XYZ'')
, etc.
Lamento que no haya una respuesta simple de una línea ...