Кажется, что документ, который вы пытаетесь найти (и выберите некоторые поля), уже удален второй частью вашего кода. (Это возможно, потому что все эти операции асинхронные).
Не уверен, что это лучшее решение, но я рекомендую вам удалить документ только после того, как он был найден, и его productImage был успешно получен, а fs unlink запущен.
Router.delete('/:productId', checkAuth, (req, res, next) => {
const id = req.params.productId;
var imageName = "";
Product.findById(id)
.select('productImage')
.exec()
.then(docs => {
imageName = docs.productImage;
fs.unlinkSync(__rootdir + "\\" + imageName);
console.log(docs.productImage); // by the way you had misspell here
return Product.deleteOne({_id: id}).exec();
})
.then(() => {
res.status(200).json({
message: 'Product Deleted',
request: {
type: 'POST',
url: 'http://localhost:3000/products/',
body: {
name: 'String',
price: 'Number',
productImage: 'String'
}
}
});
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
});
P.S. Я также рекомендую не использовать метод unlinkSync
, потому что синхронные операции блокируют поток. Я бы предпочел использовать fs.unlink
.