web-dev-qa-db-fra.com

Lire le corps d'une promesse de chercher

Je suis sûr que la réponse est simple, mais je ne sais pas comment le faire.

J'ai le point de terminaison express suivant pour le téléchargement sur le stockage Google Cloud. Cela fonctionne très bien et la réponse de l'API Google me donne un nom de fichier unique que je souhaite transmettre à mon serveur:

app.post('/upload', (req, res) => {
  var form = new formidable.IncomingForm(),
  files = [],
  fields = [];

  form
    .on('field', function(field, value) {
      fields.Push([field, value]);
    })
    .on('file', function(field, file) {
      files.Push([field, file]);
    })
    .on('end', function() {
      console.log('-> upload done');
    });
  form.parse(req, function(err, fields, files){
    var filePath = files.file.path;
    bucket.upload(filePath, function(err, file, apiResponse){
      if (!err){
        res.writeHead(200, {'content-type': 'text/plain'});
        res.end("Unique File Name:" + file.name);
      }else{
        res.writeHead(500);
        res.end();
      }
    });
  });

 return;
});

J'atteins ce noeud final en appelant une fonction courte qui lui transmet le fichier:

function upload(file) {
  var data = new FormData();
  data.append('file', file);
  return fetch(`upload`,{
    method: 'POST',
    body: data
  });
}

const Client = { upload };
export default Client;

Cette fonction s’appelle de mon côté frontal comme ceci:

Client.upload(this.file).then((data) => {
  console.log(data);
});

Cette dernière console.log(data) enregistre la réponse dans la console. Cependant, je ne vois nulle part la réponse que j'ai écrite ("Unique File Name:" + file.name)

Quelqu'un at-il des suggestions sur la manière de récupérer ces informations dans le corps de la réponse côté client?

MODIFIER:

Le data ressemble à ceci lorsque je le console.log:

Screenshot of the data console.log

EDIT 2:

C’est la réponse que j’obtiens lorsque je POST un fichier sur mon terminal à l’aide de Postman: Screen shot of response using Postman

33
quicklikerabbit

Notez que vous traitez avec un objet Response . Vous devez fondamentalement lire le flux de réponses avec Response.json() ou Response.text() (ou via d'autres méthodes) dans l'ordre pour voir vos données. Sinon, le corps de votre réponse apparaîtra toujours comme un flux lisible verrouillé. Par exemple:

fetch('https://api.ipify.org?format=json')
.then(response=>response.json())
.then‌​(data=>{ console.log(data); })

Si cela vous donne des résultats inattendus, vous pouvez vérifier votre réponse avec Postman .

47
Gabe Rogan

@GabeRogan m'a donné la réponse (et j'avais une faute de frappe, comme prévu)

Voici mon code mis à jour pour le serveur qui renvoie le texte du corps de la réponse:

Client.upload(this.file).then(response => response.text())
  .then((body) => {
    console.log(body);
  });

body est une chaîne qui se lit "Nom de fichier unique: [FILE-NAME]"

MODIFIER:

Voici une bonne explication de l'API Fetch et la lecture de la réponse obtenue à partir de l'objet promesse: https://css-tricks.com/using-fetch/

6
quicklikerabbit