Я начинаю работать с node.js и mongoose и полным стеком в целом. Я бил голову над созданием базы данных и общением с моим сервером и не мог заставить ее работать. Я не согласен с этим руководством: Easily Develop Node.js and MongoDB Apps with MongooseФункция Mongoose .save, похоже, не вызывает вызов в скрипте node.js
В любом случае, мои файлы организованы довольно просто на данный момент. Мой сервер.js находится в том же каталоге, что и папка «models», в которой содержится файл «testSchema.js».
У меня есть сценарий, который можно вызвать нажатием кнопки в файле server.js.
var mongoose = require('mongoose');
var mongoURL = "mongodb://username:[email protected]:27017/test";
mongoose.connect(mongoURL);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log("We have connected");
var Item = require("./models/testSchema");
var newItem = Item({
name: 'Peter',
score: 5
});
newItem.save(function(err) {
if (err) throw err;
console.log("Item Created");
});
});
mongoose.connection.close();
Это должно добавить образец образца в мою модель. И, наконец, testSchema.js:
var Schema = mongoose.Schema;
var ItemSchema = new mongoose.Schema({
name: {
type: String,
index: true
},
score : Number
});
var Item = mongoose.model('Item', ItemSchema);
module.exports = Item;
Так что, когда я бегу сценарий, я получаю сообщение, но не сообщение «создано Item», ни какой-либо журнал ошибок, которые придут «Мы подключили!» после вызова функции .save. Казалось бы, это просто пропущено, но я не знаю, как ведут себя мангусты и node.js в этом контексте. Является ли даже вызов?
Дополнительно: Моя база данных mongoDB размещена на Openshift, но я перенаправлял порт на localhost, и похоже, что он работает нормально. Когда я вызываю скрипт, я получаю сообщение «Обработка соединения для 27017».
Любая помощь была бы принята с благодарностью!
** редактировать **
Я не могу комментировать, так что я буду просто редактировать свой пост.
Захири Якоби и ответы Роберта Клепа сделали трюк! Большое вам спасибо, я не знал, что узел такой асинхронный.
Вы закрыть соединение до того, как 'open' событие увольняют. Это в конечном счете связано с тем, как асинхронные операции работают в узле (где операция может еще не завершиться при выполнении следующей строки кода). – robertklep