当我发送多个图像时,无法访问multer req.body

时间:2017-07-12 14:04:43

标签: node.js express multer

我使用Multer包进行上传。我必须在上传图片之前检查令牌。 .single()没有问题。但是,当我想上传多个图片时,似乎没有req.body.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'))
        }
    })
}

* Multer diskStorage

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)会返回invalid

1 个答案:

答案 0 :(得分:1)

更改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')
      })
  }
})