我目前正在使用nodejs开发API。我希望用户上传文件以及其他必需的详细信息。但是问题是,在我能够验证用户通过的必需详细信息之前,multer已上传文件。是否只有在验证了req.body值之后才可以上传文件?
我当前的代码:
router.post("/", upload.single("gallery_item_image"), function (req, res, next) {
Branch
.findById({ _id: req.body.branch_id })
.exec()
.then((doc) => {
if(!doc || req.body.branch_id.length < 24) {
return res.status(404).json({
message: "Invalid Branch ID",
})
}
galleryItem = new GalleryItem({
_id: mongoose.Types.ObjectId(),
branch_id: req.body.branch_id,
caption: req.body.caption,
description: req.body.description,
absoluteImagePath: req.file.path,
imagePath: "some.url"
})
return galleryItem.save()
})
.then((response) => {
console.log(response);
res.status(201).json({
message: "Gallery item successfully added to the database",
galleryItem: {
_id: response._id,
branch_id: response.branch_id,
imagePath: response.imagePath.replace("\\", "/"),
caption: response.caption,
description: response.description,
date: response.date,
absoluteImagePath: response.absoluteImagePath,
meta: {
type: "GET",
url: "some.url",
}
}
})
})
.catch((error) => {
console.log(error);
res.status(500).json({
error: error
})
})
})
答案 0 :(得分:0)
并非完全是作者的要求,但是如果您要通过JWT或类似方式验证请求,则可以在请求标头中添加身份验证数据,例如
Authorization: TOKEN_OR_ANY_AUTHETICATION_DATA
您将可以访问标头,而无需访问正文,因此可以解决您的问题。这样您就可以在中间件中使用这些数据。或上传文件之前调用的任何功能
答案 1 :(得分:-1)
我认为您可以在考虑实际的中间件之前使用中间件。类似于以下代码:
const validator = function(req, res, next) {
// Do some validation and verification here
if(okay)
return next();
else
return res.status(400).send({message: 'Invalid Arguments(For Example!)'})
}
并在上载之前将此功能用作中间件,如下所示:
router.post("/", validator, upload.single("gallery_item_image"), function (req, res, next) {
// Your code goes here
}
希望对您有帮助。