[英]nodejs multer edit a uploaded file with mongodb
i have a website where you can upload files.我有一个网站,您可以在其中上传文件。 but i want that you can edit them too.
但我希望你也可以编辑它们。 that means the user can press edit en put a new file in and it changes the file on the database.
这意味着用户可以按 edit en 放入一个新文件,它会更改数据库中的文件。 with normal text you can do findByIdAndUpdate.
使用普通文本,您可以执行 findByIdAndUpdate。 but with a async function youcan.
但是使用异步 function 你可以。 so my question is how can i do this.
所以我的问题是我该怎么做。
here is my code for uploaden这是我的上传代码
var storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "uploads");
},
filename: (req, file, cb) => {
cb(null, file.fieldname + "-" + Date.now() + ".png");
},
});
var upload = multer({ storage: storage });
router.use(flash())
router.get("/create", (req, res) => {
res.render("uploadPicture", {
items: items,
user: req.auth,
title: "Upload",
});
});
router.get("/", (req, res) => {
image.find({}, (err, items) => {
if (err) {
console.log(err);
res.status(500).send("An error occurred", err);
} else {
res.render("uploadPicture", {
errMsg: req.flash('image'),
items: items,
user: req.auth,
title: "pictures",
});
}
});
});
router.post("/upload", upload.single("image"), async (req, res, next) => {
//const userid = await user.findById({_id : userid});
//console.log(userid);'
const { folder } = sanitize(req.body);
var obj = {
name: req.body.name,
userId: req.auth.userId,
folder: folder,
img: {
data: fs.readFileSync(
path.join(__dirname, "../uploads/" + req.file.filename )
),
contentType: "image/png",
},
};
image.create(obj, (err, items) => {
if (err) {
console.log("Test")
console.log(err);
req.flash('image', 'Image failed to upload!')
res.redirect("/picture")
} else {
console.log(obj);
items.save();
req.flash('image', 'Image succesfully uploaded!')
res.redirect("/picture")
}
});
});
module.exports = router;
and here is what it tried myself but didnt work because i get the error: TypeError: Cannot read property 'findByIdAndUpdate' of undefined这是它自己尝试但没有成功的方法,因为我收到错误:TypeError: Cannot read property 'findByIdAndUpdate' of undefined
router.post("/edit/:id", upload.single("image"), async(req, res ) =>{
const id = req.params.id;
console.log(req.params.id)
const { folder } = sanitize(req.body);
var obj = {
name: req.body.name,
userId: req.auth.userId,
folder: folder,
};
if(req.body.image == ""){
console.log("nothing here")
image.findByIdAndUpdate(id, {name: req.body.name,folder: folder,}, function(err, docs){
if (err) {
console.log(err);
req.flash('image', 'Image failed to upload!')
res.redirect("/picture")
} else {
console.log(obj);
req.flash('image', 'Image succesfully uploaded!')
res.redirect("/picture")
}
})
}else{
var image = {
img: {
data: fs.readFileSync(
path.join(__dirname, "../uploads/" + req.file.filename )
),
contentType: "image/png",
},
}
image.findByIdAndUpdate(id, {name: req.body.name,folder: folder,image: image}, function(err, docs){
if (err) {
console.log(err);
req.flash('image', 'Image failed to upload!')
res.redirect("/picture")
} else {
console.log(obj);
req.flash('image', 'Image succesfully uploaded!')
res.redirect("/picture")
}
})
}
})
this last part is a bit messy but i was trying some stuff最后一部分有点乱,但我正在尝试一些东西
i came with a solution if anyone has to do this later如果有人以后必须这样做,我会提供解决方案
router.post("/edit/:id", upload.single("image"), async (req, res, next) => {
const id = req.params.id;
const { folder } = sanitize(req.body);
if(req.file == null){
console.log("text")
try{
const res = await image.findOneAndUpdate({_id:id}, {name: req.body.name,folder: folder})
console.log(res.name + " " + res.folder + " " + res._id);
}
catch(err){
console.log(err);
}
req.flash('imageView', 'ImageText succesfully to upload!');
res.redirect("/view/" + req.params.id);
}else{
console.log("edit picture")
try{
const res = await image.findOneAndUpdate({_id:id}, {name: req.body.name,folder: folder, img: {data: fs.readFileSync(
path.join(__dirname, "../uploads/" + req.file.filename )
),
contentType: "image/png",
}, })
console.log(res.name + " " + res.folder + " " + res._id);
}
catch(err){
req.flash('imageView', 'Image and text failed to upload!')
res.redirect("/view/" + req.params.id)
console.log(err);
}
req.flash('imageView', 'ImageText succesfully upload!');
res.redirect("/view/" + req.params.id);
}
})
this is how i did it我就是这样做的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.