我有一个简单的fs.readFile
函数来读取json文件数据,获取其属性之一(数组),并检查该数组是否包含用户生成的数组的每个元素,为此我使用此代码>
const contains = (arr1, arr2) =>
arr2.every(v => arr1.indexOf(v) !== -1)
fs.readFile('../tags.json', 'utf8', (err, data)=>{
if(err) return res.status(500).send({message: err.message});
var JsonData = JSON.parse(data);
var tagsArray = JsonData.tags;
console.log(tagsArray)
console.log(tags)
if(tagsArray instanceof Array){
console.log('tagsArray is array')
}
var bool = contains(tagsArray, tags)
if(!bool){
return res.status(409).send({
message: 'don't provide your own tags'
})
}
})
const user = await User.findById(req.userId, '-password').lean()
const book = await Dish.create({
//properties
})
return res.status(200).send({var: JSON.stringify(book)})
} catch (error) {
return res.status(500).send({
message: error.message
})
}
我在fs.readFile
所在的函数(router.post)中有try catch块,但它仍然给我以下消息:
UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个 错误是由于抛出异步函数而导致的 阻止,或者拒绝未由.catch()处理的承诺。
还有此错误:
UnhandledPromiseRejectionWarning:错误:发送标头后无法设置标头。
答案 0 :(得分:1)
const contains = (arr1, arr2) =>
arr2.every(v => arr1.indexOf(v) !== -1)
let match = false;
fs.readFile('../tags.json', 'utf8', (err, data)=>{
var JsonData = JSON.parse(data);
var tagsArray = JsonData.tags;
console.log(tagsArray)
console.log(tags)
if(tagsArray instanceof Array){
console.log('tagsArray is array')
}
match = contains(tagsArray, tags)
});
const user = await User.findById(req.userId, '-password').lean()
const book = await Dish.create({
//properties
});
if(!match){
return res.status(409).send({
message: 'don't provide your own tags'
});
}
return res.status(200).send({var: JSON.stringify(book)})
}
catch (error) {
return res.status(500).send({
message: error.message
});
}
您可以尝试执行此操作,这仅应使用200或409或500个状态代码调用一次res.send。