[英]How to delete image only if it already exists
我正在开发Node.js + Express.js Web应用程序。
我创建了一个用户个人资料页面,该页面允许用户输入个人信息和照片。
我想确保如果用户上传新照片,则应该删除旧图像。
现在,如果用户是第一次上传照片,则覆盖旧照片但我的代码可以正常工作,然后崩溃,并显示500错误页面。
我怎样才能解决这个问题 ?
exports.postEditCustomerProfile = (request, response, next) => {
const firstName = request.body.firstName;
const lastName = request.body.lastName;
const phone = request.body.phone;
const address = request.body.address;
const image = request.file;
const UserId = request.user._id;
const errors = validationResult(request);
if (!errors.isEmpty()) {
return response.status(422).render('site/edit_customer', {
pageTitle: 'Edit Customer',
path: '/edit_customer',
user: {
email: request.user.email,
firstName: firstName,
lastName: lastName,
phone: phone,
address: address,
},
errorMessage: errors.array()[0].msg,
validationErrors: errors.array()
});
}
User.findOne(UserId)
.then(user => {
user.firstName = firstName ? firstName : user.firstName;
user.lastName = lastName ? lastName : user.lastName;
user.phone = phone ? phone : user.phone;
user.address = address ? address : user.address;
if (image) {
//This line of code should delete the old photo before uploading the new photo.
fileHelper.deleteFile(user.photoUrl);
user.photoUrl = image.path;
}
return user.save();
})
.then(result => {
console.log('Updated Customer Profile Info');
response.redirect('/edit-customer');
})
.catch(err => {
const error = new Error(err);
error.httpStatusCode = 500;
return next(error);
});
};
我在终端日志中得到这个
Error: ENOENT: no such file or directory, unlink ''
根据要求添加! deleteFile方法的代码
const fs = require('fs');
const deleteFile = (filePath) => {
fs.unlink(filePath, (err) => {
if (err) {
throw (err);
}
})
}
exports.deleteFile = deleteFile;
当函数抛出错误时,这会回答问题吗?
try {
fileHelper.deleteFile(user.photoUrl);
}
catch(err) {
}
请对您的代码进行以下更改,它将对您很好。
新代码如下所示:
if (user.photoUrl) {
//This line of code should delete the old photo before uploading the new photo.
fileHelper.deleteFile(user.photoUrl);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.