发送多张图片时无法访问 multer req.body

Connot access to multer req.body when I send multiple images

我使用 Multer 包上传。我必须在上传图片之前检查令牌。 .single()没有问题。但是当我要上传多张图片时,好像没有req.body.token

* 检查token函数:

_checkToken = (token) => {
    return User.
    findOne({'token':token},'_id')
    .then((data) => {
        if(data) return data._id.toString()
        else return 'invalid'
    })
}

* 请求 _checkToken():

let userId
checkRequest = (data) => {
    return new Promise((resolve,reject)=>{
        let token = data.token
        if(token){
            _checkToken(token).then((auth) => {

                if(auth.length==24){
                    _userId = mongoose.mongo.ObjectID(auth)
                    resolve('valid')
                }
                else{
                    resolve('invalid')
                }
            }).catch(err => reject('invalid'))
        }
    })
}

* 多磁盘存储

var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        checkRequest(req.body).then((check)=>{
            if(check=='valid'){
                let newPost = new Post()
                newPostId = newPost._id
                let dir = `./data/posts/${newPostId}`;
                if (!fs.existsSync(dir)){
                    fs.mkdirSync(dir);
                }
                cb(null, dir)
            }
            else return false
        })
    },
    filename: function (req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now())
    }
})

var uploadImages = multer({ storage: storage }).single('image')

*路线

routes.post('/post', (req,res) => {
    uploadImages(req,res,(err)=>{
        if(err) res.send('error')
        else{
            if(newPostId){
                // ...
                let data = {
                    _id: newCampaignId,
                    // ...
                }
                Post.create(data).then((p)=>{
                    res.send('done')
                })
            }
        }
    })
})

当我使用 .array('images') 而不是 .single('image') 时,似乎没有 req.body.token 因为 _checkToken(token) returns invalid.

更改您对 multer 的使用,使其成为所需路由的中间件堆栈的一部分。您当前使用的 multer 仅提取文件信息但不处理 req.body.

let uploadImages = multer({storage})

routes.post('/post', uploadImages.array('images'), (req,res) => {  
  if(newPostId){
      // ...
      let data = {
          _id: newCampaignId,
          // ...
      }
      Post.create(data).then((p)=>{
          res.send('done')
      })
  }
})