我正在尝试在NodeJS中为新闻阅读器应用编写一个后端。我们的想法是每隔几分钟检查一次RSS提要,将新项目保存到数据库,并在将新项目添加到数据库时向连接的用户发出事件。
我在编写保存到数据库的模块时遇到问题。期望的行为如下:
已配置数据库模型,因此当我尝试保存已存在的项目时,数据库会拒绝它。但是,下面的代码从不记录成功的保存,如果我删除数据库,它只保存第一个文档,然后给我一个重复的键错误。
知道我做错了吗?
// Module
var { mongoose } = require('../db/mongoose');
var { Item } = require('../models/item');
var { scrape } = require('./scrape')
var { parse } = require('./parse')
var updateNewsDatabase = function() {
return new Promise((resolve, reject) => {
console.log('Scraping now')
scrape().then((rssFeeds) => {
var output = parse(rssFeeds);
saveEachNewsItem(output)
.catch((e) => {
console.log('Error:', e);
resolve()
})
})
});
}
async function saveEachNewsItem(newsItems) {
for (let item of newsItems) {
console.log('Attempting to save document')
var itemToSave = new Item(item);
await itemToSave.save()
.then((err, docs) => {
if (docs) {
console.log('Saved document to database')
}
if (err) {
throw new Error(err)
}
});
}
}
module.exports = { updateNewsDatabase }
答案 0 :(得分:0)
在代码的这一部分中,您抛出异常并使其停止for循环。
await itemToSave.save()
.then((err, docs) => {
if (docs) {
console.log('Saved document to database')
}
if (err) {
throw new Error(err)
}
});