代码之家  ›  专栏  ›  技术社区  ›  Milad Jafari

无法访问multer req。发送多个图像时的正文

  •  0
  • Milad Jafari  · 技术社区  · 7 年前

    我使用Multer软件包进行上传。在上传图片之前,我必须检查令牌。没有问题 .single() req.body.token .

    *检查令牌功能:

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

    *请求\u 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') 请求主体令牌 因为 _checkToken(token) invalid .

    1 回复  |  直到 7 年前
        1
  •  1
  •   peteb    7 年前

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