node.js - 在nodejs中使用multer上传文件之前验证请求正文
问题描述
我想根据他们的学校ID上传用户资料
// import multer
var multer = require('multer')
// import school and student models
const { School } = require('./models/school/school.model.js')
const { Student } = require('./models/student/student.model.js')
// configure multer
const storage = multer.diskStorage({
destination: (req, file, cb) => {
const dir = `./uploads/schools/${req.body.schoolId}/students`
fs.exists(dir, exist => {
if (!exist) {
return fs.mkdir(dir, { recursive: true }, error => cb(error, dir))
}
return cb(null, dir)
})
},
filename: (req, file, cb) => {
cb(null, `student-${normaliseDate(new Date().toISOString())}.${file.originalname.split('.')[file.originalname.split('.').length - 1]}`)
}
})
var upload = multer({storage: storage}).single('profile')
app.post('/student', function (req, res) {
// check if submitted school id is valid
let school = await School.findOne({ _id: req.body.schoolId })
if (!school)
return res.send(`School of id ${req.body.schoolId} doesn't exist`)
// upload the profile pic
upload(req, res, function (err) {
if (err)
return res.send(err)
})
// save the student
let newStudent = new Student({
name: req.body.name,
email: req.body.email,
school: req.body.schoolId,
profile: req.file.filename
})
const saveDocument = await newStudent.save()
if (saveDocument)
return res.send(saveDocument).status(201)
return res.send('New College not Registered').status(500)
})
但是当我在上传配置文件之前尝试访问 req.body 时,我得到一个空对象。
我会将个人资料上传到临时文件夹中,稍后再移动,但如果提交的学校 ID 无效怎么办?这将要求我删除上传的文件。所以我想确保提交的详细信息有效,然后上传个人资料,稍后保存学生。
解决方案
检查您的代码,您正在使用等待,但找不到异步。虽然它可能不是获得空 req.body 对象的原因。
let school = await School.findOne({ _id: req.body.schoolId })
const saveDocument = await newStudent.save()
推荐阅读
- javascript - 尝试从 webmap API 版本 4.11 创建地图时,ArcGIS util 加载失败
- scala - 如何将 Dstream 或 RDD 的内容附加到现有输出文件 - Spark Streaming
- css - Tailwind CSS + VueJS 单文件组件和 VS Code 集成
- python-appium - 如何在 Windows 上使用 Appium 和 Python 从应用程序菜单中单击菜单项?
- python - 如何从 mongoDB 查询中输出具有无效日期时间字段的 BSON 文档
- python - pandas - 在 Pandas 中组合列
- bash - 在花括号中的“while”循环中分配变量不起作用
- javascript - 有没有更好的方法来检查数组中的相似性?
- angular - 有什么解决方案可以在 angular4 中编辑日期吗?
- java - 使用不指向任何 ID 属性的 @JoinColumn 持久化实体