如何解决如果节点 js
const update = async (req,res,next) => {
try {
const payload = req.body;
if (req.file) {
const tmp_path = req.file.path;
const originalExt = req.file.originalname.split(".")[
req.file.originalname.split(".").length - 1
];
const filename = req.file.filename + "." + originalExt;
const target_path = path.resolve(rootPath,`public/upload/${filename}`);
const src = fs.createReadStream(tmp_path);
const dest = fs.createWriteStream(target_path);
src.pipe(dest);
src.on("end",async () => {
try {
const product = await Product.findOne({ _id: req.params.id });
const currentimage = `${rootPath}/public/upload/${product.image_url}`;
if (fs.existsSync(currentimage)) {
fs.unlinkSync(currentimage);
} else {
return res.json("File does not exist");
}
const newProduct = await Product.findOneAndUpdate(
{ _id: req.params.id },{ ...payload,image_url: filename },{ new: true,runValidators: true }
);
return res.json(newProduct);
} catch (err) {
if (err && err.name === "ValidationError") {
return res.json({
error: 1,message: err.message,fields: err.errors,});
}
next(err);
}
});
src.on("error",async () => {
next(err);
});
} else {
const product = await Product.findOneAndUpdate(
{ _id: req.params.id },payload,runValidators: true }
);
await product.save();
return res.json(product);
}
} catch (err) {
if (err && err.name === "ValidationError") {
return res.json({
error: 1,});
}
next(err);
}
};
const { Schema,model } = require("mongoose");
const productSchema = Schema(
{
name: {
type: String,minlength: [3,"Please enter at least 3 characters"],required: [true,"The name field is required"],},description: {
type: String,maxlength: [1000,"Please enter less than 1000 characters"],price: {
type: Number,default: 0,image_url: String,{ timestamps: true }
);
module.exports = model("products",productSchema);
代码运行良好。但是当我的姓名字段为空并将数据发送给邮递员时,会出现验证错误“需要姓名”,但图像数据已替换为新的。
if (fs.existsSync (currentimage)) {
fs.unlinkSync (currentimage);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。