node await express mongoose kraken.js

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.

  1. 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ón config pero no devuelve el objeto de conexión generado por .createConnection .
  2. Actualice index.js si cambia la forma de configurar / crear la conexión en db.config . Es posible que pueda evitar esto, pero sospecho que reescribirá todo el db.js alrededor de la nueva llamada.
  3. 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 formato var xyz = db.model(''XYZ'') , etc.

Lamento que no haya una respuesta simple de una línea ...