首页 > 解决方案 > 在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 无效怎么办?这将要求我删除上传的文件。所以我想确保提交的详细信息有效,然后上传个人资料,稍后保存学生。

标签: node.jsmulter

解决方案


检查您的代码,您正在使用等待,但找不到异步。虽然它可能不是获得空 req.body 对象的原因。

let school = await School.findOne({ _id: req.body.schoolId })
const saveDocument = await newStudent.save()

推荐阅读