2017-02-04 2 views
1

У меня есть относительно простой сценарий узла, который должен открыть соединение mongodb (используя mongoose) и вернуть все записи в тестовую коллекцию.Почему соединение мангуста зависает, когда в отдельном модуле?

По какой-то причине, когда я разделяю вызов mongoose.connect в отдельный модуль (потому что он будет использоваться несколькими скриптами), скрипт не работает. Но когда я делаю вызов connect в том же файле, он работает.

Разбитое Версия

connect.js

var mongoose = require("mongoose"); 
var config = require("./_config"); // holds different mongo URIs for dev/prod 

var mongoUrl = config.mongoURI[process.env.NODE_ENV]; 

mongoose.connect("mongodb://localhost/test"); 
var db = mongoose.connection; 
db.on("connected", function() { 
    console.log("Mongoose default connection open to " + mongoUrl); 
}); 

script.js

var mongoose = require("mongoose"); 
var Schema = mongoose.Schema; 
require("../server/connect"); 

var testSchema = new Schema({ 
    teststring: String 
}, { 
    timestamps: true 
}, { bufferCommands: false }); 

var Tester = mongoose.model("Tester", testSchema); 
Tester.find(function (err, result) { 
    console.log(result); 
}); 
// node script.js 
// Outputs "Mongoose default connection open to mongodb://localhost/test" 
// then hangs 

Рабочая версия

script.js

var mongoose = require("mongoose"); 
var Schema = mongoose.Schema; 
var config = require("./_config"); 

var mongoUrl = config.mongoURI[process.env.NODE_ENV]; 

mongoose.connect(mongoUrl); 
var db = mongoose.connection; 
db.on("connected", function() { 
    console.log("Mongoose default connection open to " + mongoUrl); 
}); 

var testSchema = new Schema({ 
    teststring: String 
}, { 
    timestamps: true 
}, { bufferCommands: false }); 

var Tester = mongoose.model("Tester", testSchema); 
Tester.find(function (err, result) { 
    console.log(result); 
}); 

Это один-версия файла отлично работает и возвращает результаты. Как видите, единственная разница, по-видимому, заключается в использовании 1 файла против 2.

Что мне здесь не хватает?

ответ

0

Вы пытались экспортировать что-то из своего модуля «./connect»? В противном случае узел не будет иметь ничего, чтобы сохранить, и соединение будет собираться мусором.

Добавьте это в последней строке: module.exports = db

А затем присвоить его переменной при импорте var mongoDb = require('./connect')

+0

Да, не повезло с этим. – nrflaw

0

Фигурные это - папка /server/ имела свою собственную node_modules папку, так require("mongoose") в connect.js было фактически включая другой экземпляр мангуста, чем сценарий. Чтение the node module docs очень помогло мне разобраться во всем.

Смежные вопросы