2017-07-12 3 views
0

J'utilise le package Multer pour le téléchargement. Je dois vérifier le jeton avant de télécharger des images. Il n'y a pas de problème avec .single(). Mais quand je veux télécharger plus d'une image, il semble qu'il n'y a pas req.body.token.Accès au Connot à plusieurs personnes lorsque j'envoie plusieurs images

* Vérifier le fonctionnement jeton:

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

* Demande de _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') 

* itinéraire

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

Lorsque j'utilise .array('images') au lieu de .single('image'), il semble qu'il n'y a pas req.body.token parce que _checkToken(token) retours invalid.

Répondre

1

Modifiez votre utilisation de multer pour qu'il fasse partie de la pile de middleware pour l'itinéraire souhaité. Votre utilisation actuelle de multer extrait uniquement les informations de fichier mais ne traite pas 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') 
     }) 
    } 
}) 
+0

Oh, merci beaucoup. Tout va bien! – user1788781