mongodb - 只有当所有 mongoose model.save() 都已保存在 express js 中时,我如何才能返回响应?
问题描述
我正在做一些快速的 mongo restful 应用程序,并且我已经创建了一种从网站上抓取数据并使用 mongoose 保存到 MongoDB 的方法。当我循环遍历每个数据并调用 model.save() 并等待循环停止或成功然后将响应提供给客户端时,我真的很困惑如何为客户端返回响应。
这是我的方法来抓取数据并循环遍历每个然后调用猫鼬 save() 以将数据一一保存。
router.get('/', async (req, res) => {
let url = 'https://www.bi.go.id/id/moneter/informasi-kurs/transaksi-bi/'
await axios.get(url)
.then(async response => {
let html = response.data;
let $ = cheerio.load(html);
let box = $('.box_gray').html()
let insertedDocs = [];
let coba = await $(box).find('.table1 > tbody > tr').slice(1, 26).each(async (i, elem) => {
let arrayData = [];
$(elem).find('td').slice(0, 4).each((i, elem) => {
arrayData.push($(elem).text().trim())
})
// get currency ref id
Currency.findOne({code: arrayData[0]}).exec(async (err, currency) => {
if (err) return res.status(500).json({message: err.message})
if (currency) {
// set object
let currencyDataObj = {
'_currency': '',
'value': '',
'sell': '',
'buy': ''
}
currencyDataObj._currency = currency._id
currencyDataObj.value = parseFloat(arrayData[1])
currencyDataObj.sell = parseFloat(arrayData[2].replace(/[,]/g, ''))
currencyDataObj.buy = parseFloat(arrayData[3].replace(/[,]/g, ''))
// insertedDocs.push(currencyDataObj)
let currencyData = new CurrencyData(currencyDataObj);
const newCurrencyData = await currencyData.save();
console.log(newCurrencyData)
// let successResponse = {
// status: 'success',
// message: `success save kurs data to db with id ${newCurrencyData._id}`
// }
// res.json(successResponse);
} else {
console.log('dont have an id', arrayData[0])
}
})
})
Promise.all([coba]).then(values => {
console.log(values);
});
})
});
module.exports = router;
架构
const currencySchema = new mongoose.Schema({
code: {type: String, uppercase: true, required: true, unique: true, dropDups: true},
symbol: {type: String, required: true},
digitalCode: {type: Number, required: true},
name: {type: String, required: true},
country: {type: String, required: true},
currencyData: [{type: mongoose.Schema.Types.ObjectId, ref: 'CurrencyData'}]
})
const currencyDataSchema = new mongoose.Schema({
_currency: {type: mongoose.Schema.Types.ObjectId, ref: 'Currency'},
value: {type: Number, required: true},
sell: {type: Number, required: true},
buy: {type: Number, required: true},
lastUpdatedDateISO: {type: Date},
})
exports.Currency = mongoose.model('Currency', currencySchema);
exports.CurrencyData = mongoose.model('CurrencyData', currencyDataSchema);
我已经尝试过 promise.all() 但它不会等待 mongoose.save() 完成。在此先感谢您的帮助!
解决方案
推荐阅读
- javascript - jQuery 脚本 - 通过 SVG id 滚动到 div
- python - 如何将结果从一个变量转移到excel中的一列?
- javascript - Linux 上的 Karma 启动器
- wpf - 如何在 xaml 中引用应用程序路径?
- coldfusion - 在 CFDocument 问题的修复中使用 CFDocumentItem 在循环中忽略背景颜色
- python - pytest命令行参数重写
- reporting-services - 在报表标题中显示列值
- c# - 如何使用带有 HTTP 触发器的 Azure Functions 在 Azure Blob 存储中上传 excel 文件?
- xml - 使用从 Xml 读取的变量,并使用它通过 Powershell 从另一个 xml 中搜索元素
- android - 如何使用 PC 从隐藏的应用程序中获取数据?