Попытка отправить некоторые объекты в базу данных с помощью Mongoose. А именно, я получаю поисковые запросы и сохраняю их в db, ведя учет количества уникальных записей.
Вот моя схема:
const entrySchema = mongoose.Schema({
searchWord: { type: String, required: true, unique: true},
numEntries:{type:Number,default:0},
});
const entry = module.exports = mongoose.model('entry', entrySchema);
Вот метод, который я использую:
searchRouter.post('/search', (req, res) => {
let entry = new SearchEntry();
SearchEntry.findOneAndUpdate({ searchWord: req.body.searchWord },
{ $inc: { numEntries: 1 } },
{ new: true }, (err, response) => {
if (err) {
console.info(err);
}
if (!response.length) {
entry.searchWord = req.body.searchWord;
SearchEntry.save((err) => {
if (err) {
console.info(err);
}
})
}
})
});
Теперь в консоли он выдает ошибку, когда я пытаюсь проверить это с помощью почтальона:
TypeError: невозможно прочитать свойство length, равное нулю.
Есть идеи, что я делаю не так?
P.S. клиент REST отвечает: «Запрошенный URL недоступен», однако мы достигли желаемого маршрута, и запускается метод отправки.
В этом случае клиент REST зависает
Потому что вы никогда не отправляете ответ.
Идея мне нравится, но что ты имеешь в виду? Куда мне отправить обратно?





Ответ может быть нулевым, а не пустой строкой, объектом или массивом объектов, и вы не можете получить нулевую длину, потому что null не является строкой или массивом объектов, поэтому вы должны проверить, является ли ответ! = Null, а затем проверить длина.
Наконец, с вашей помощью мы пришли к решению:
searchRouter.post ('/ search', (req, res) => {
let entry = new SearchEntry();
SearchEntry.findOneAndUpdate({ searchWord: req.body.searchWord },
{ $inc: { numEntries: 1 } },
{ new: true }, (err, response) => {
if (err) {
console.info('find error ', err);
}
if (response === null) {
console.info('here');
entry.searchWord = req.body.searchWord;
console.info(entry);
entry.save((err) => {
if (err) {
console.info('save error', err);
}
})
}
})
res.send('done');
});
попробовать ->
if (response && !response.length) { ... }