У меня есть странная проблема с Node.js, где каталоги node_module, кажется, мешают друг другу. У меня есть следующая структура файла:Node.js node_modules, мешающие друг другу
- node_modules
- User.js
- app
- app.js
- node_modules
Так что я node_modules в каталоге верхнего уровня, а также один внутри каталога приложений. Каждый каталог node_modules содержит только каталог mongoose. Файл user.js простой мангуст модель:
exports.User = function() {
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
email: { type: String },
firstName: { type: String },
lastName: { type: String },
});
mongoose.model("User", UserSchema);
var User = mongoose.model("User");
return User;
}();
Основное приложение, app.js, выглядит следующим образом:
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/crnapi");
require("../User").User.find(function(err, users) {
if(err)
console.log(err);
console.log("here");
});
Ничего, кроме подключения к Монго и найти пользователя. Проблема, которую я вижу, заключается в том, что вызов find() просто зависает - обратный вызов никогда не вызывается.
Однако, если я удалю внутренний каталог node_modules (тот, который находится внутри папки приложения), он отлично работает. Это похоже на присутствие внутренних узлов_модулей, которые каким-то образом закручивают работу мангуста. Я знаю, что могу поместить все в внешние node_modules и просто удалить внутреннюю, но есть причины, почему я этого не делаю.
Может ли кто-нибудь сказать мне, что здесь происходит? Есть ли режим отладки, в котором я могу запускать узел или мангуст, который скажет мне, что он повесил трубку?
Что-то мне пришло в голову. Возможно ли создание и использование двух отдельных экземпляров мангуста? В app.js можно использовать один из внутренних узлов node_modules, а User.js будет использовать один из внешних узлов node_modules. Может быть, у меня есть два отдельных подключения к mongodb? – d512
Вы правы, вы получите два отдельных экземпляра Mongoose. Тот, который ваша загрузка в ваш модуль «User.js», вероятно, никогда не получит соединение. Из-за этого запрос просто ставится в очередь (это поведение по умолчанию Mongoose). Если вы хотите удерживать текущую структуру (не знаете, зачем вам нужны два каталога node_modules), вы можете сделать модуль, который является единственным заданием, чтобы вернуть объект mongoose (и, возможно, также вызвать его на нем). –
Прочтите http://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders, чтобы увидеть, как работает «именованный» модуль (т. Е. Не относительный путь). –