#node.js #mongodb #mongoose
Вопрос:
Я использую MongoDB с мангустом, я создал коллекцию фруктов, и я хочу распечатать названия фруктов, а затем отключиться от сервера
const mongoose = require('mongoose');
mongoose.connect("mongodb://localhost:27017/fruitsDB", {
useNewUrlParser: true
});
const fruitSchema = new mongoose.Schema({ //schema: come vogliamo che gli eleemnti vengano sturtturati
name: String,
rating: {
type: Number,
min: 1,
max: 10
},
review: String
});
//creiamo un modulo
const Fruit = mongoose.model("Fruit", fruitSchema);
const fruit = new Fruit({
name: "Apple",
rating: 8,
review: "good"
});
//fruit.save();
const kiwi = new Fruit({
name: "Kiwi",
rating: 10,
review: "great"
});
Fruit.find(function(err, fruits) {
if (err) {
console.log(err);
} else {
mongoose.connection.close();
fruits.forEach(function(fruit) {
console.log(fruit.name);
});
}
});
Я написал это в app.js затем я скомпилировал его с помощью команды «узел app.js»
Терминал выдает мне это:
Яблоко Яблоко Яблоко Яблоко Киви
(узел:24352) Необработанный promiserejection Предупреждение: Ошибка mongoexpiredsession: Не удается использовать сеанс, завершившийся в Object.applySession (C:UsersFederDesktopudemymongooseFruitnode_modulesmongoosenode_modulesmongodblibsessions.js:647:16) при подключении.команда (C:UsersFederDesktopudemymongooseFruitnode_modulesmongoosenode_modulesmongodblibcmapconnection.js:185:36) в C:UsersFederDesktopudemymongooseFruitnode_modulesmongoosenode_modulesmongodblibsdamserver.js:176:18 на объекте.обратный вызов (C:UsersFederDesktopudemymongooseFruitnode_modulesmongoosenode_modulesmongodblibcmapconnection_pool.js:266:13) в C:UsersFederDesktopudemymongooseFruitnode_modulesmongoosenode_modulesmongodblibcmapconnection_pool.js:474:29 в C:UsersFederDesktopudemymongooseFruitnode_modulesmongoosenode_modulesmongodblibcmapconnection_pool.js:402:13 при обратном вызове (C:UsersFederDesktopudemymongooseFruitnode_modulesmongoosenode_modulesmongodblibcmapconnect.js:52:9)в C:UsersFederDesktopudemymongooseFruitnode_modulesmongoosenode_modulesmongodblibcmapconnect.js:124:13 в MessageStream.обработчик сообщений (C:UsersFederDesktopudemymongooseFruitnode_modulesmongoosenode_modulesmongodblibcmapconnection.js:479:9) в MessageStream.emit (events.js:400:28) (Используйте node --trace-warnings ...
, чтобы показать, где было создано предупреждение) (узел:24352) Предупреждение о необработанном обещании: Необработанное отклонение обещания. Эта ошибка возникла либо в результате включения асинхронной функции без блока catch, либо в результате отклонения обещания, которое не было обработано с помощью .catch(). Чтобы завершить процесс узла при отклонении необработанного обещания, используйте флаг CLI --unhandled-rejections=strict
(см. https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (идентификатор отклонения: 1) (узел:24352) [DEP0018] Предупреждение об устаревании: Необработанные отклонения обещаний считаются устаревшими. В будущем отказы в обещаниях, которые не будут обработаны, приведут к прекращению Node.js процесс с ненулевым кодом выхода.
Ответ №1:
Прежде всего, вам нужно сначала сохранить свои модели в базе данных.
Во-вторых, похоже, что вы используете find
метод неправильно.
const fruit = new Fruit({
name: "Apple",
rating: 8,
review: "good"
});
fruit.save();
const kiwi = new Fruit({
name: "Kiwi",
rating: 10,
review: "great"
});
kiwi.save();
Fruit.find({}).then((fruits) => {
mongoose.connection.close();
fruits.forEach(function(fruit) {
console.log(fruit.name);
});
});
Также я бы предложил использовать async/await
для улучшения читаемости кода.
Комментарии:
1. «Во-вторых, похоже, что вы неправильно используете метод поиска». что вы имеете в виду?
2. Я имею в виду, что параметры неверны. Вы всегда должны передавать первый параметр, объект фильтра. Если мой ответ решил вашу проблему, пожалуйста, отметьте его как правильный.
3. это создает ту же проблему
4. Хорошо, я изменил свой ответ, попробуйте еще раз. Теперь он использует обещания вместо обратных вызовов.
Ответ №2:
Вы можете попробовать что-то в этом роде:
const fruits = await Fruit.find({})
// do whatever you want with fruits
mongoose.connection.close();
Похоже, вы пытаетесь закрыть соединение, все еще используя его. Используя ожидание, вы будете ждать завершения запроса, прежде чем закрыть соединение.