2017-09-05 1 views
0

par exemple: pour transférer un obj/localhost/transfertNode.js utilisent demande font http appels pour transférer le tableau correct format de tableau

var request = require('request'); 
var obj={ 
    tag: 'false', 
    array: [ '3', '4', '5'] 
} 

request.post({url:/localhost/transfer, form:obj},function(err,httpResponse,body){ 
      if(err){ 
       res.json({error:false}); 
      }else{ 
       res.json({error:true}); 
      } 
     }); 

get obj

router.post('/transfer',function(req, res, next){ 
    console.log(req.obj); 

}); 

l'obj console Affichage:

{ tag: 'false', 
    'array[0]': '3', 
    'array[1]': '4', 
    'array[2]': '5' } 

Comment envoyer ou recevoir des données correctement? comme celui-ci

{ 
     tag: 'false', 
     array: [ '3', '4', '5'] 
    } 

demande: https://github.com/request/request#custom-http-headers

Répondre

0

Le critère d'évaluation /transfer reçoit obj comme 'array[0]': '3', 'array[1]': '4', 'array[2]': '5' parce que le Content-Type de la requête HTTP est application/x-www-form-urlencoded - dans l'option request.post(), form propriété est utilisée. Pour envoyer l'objet JSON à /transfer, le Content-Type doit être application/json.Dans le module request, il peut être mis en œuvre comme suit:

var request = require('request'); 

var obj={ 
    tag: 'false', 
    array: [ '3', '4', '5'] 
}; 

// requestb.in URL is used here for example, but it can be replaced. 
request({ 
    url: 'https://requestb.in/srp1bmsr', 
    method: 'post', 
    body: obj, 
    json: true 
}, function(err, response, body) { 
    if(err){ 
    // deal with error. 
    }else{ 
    // deal with success response. 
    } 
}); 

Selon le module demande de document, body et json dans le code signifie:

corps - corps d'entité pour PATCH, POST et PUT demandes Doit être un tampon, une chaîne ou un ReadStream. Si json a la valeur true, le corps doit être un objet sérialisable JSON.

json - définit le corps à la représentation JSON de la valeur et ajoute Content-type: en-tête application/json. En outre, analyse le corps de la réponse en tant que JSON.

+0

Pourquoi le document ne mentionne-t-il pas cette partie? –

+0

@AlbertChen Voulez-vous dire «application/x-www-form-urlencoded»? En fait, le document du module 'request' mentionné en fournissant un exemple simple. Veuillez rechercher "application/x-www-form-urlencoded (URL-Encoded Forms)" dans la page du document et vous l'obtiendrez. – shaochuancs

0

Lors de l'envoi, vous devez définir les en-têtes de JSON comme le type de contenu.

Envoyer

let message = { 
    tag: 'false', 
    array: [ '3', '4', '5'] 
}; 

return this.http 
     .post(url, message, new Headers({'Content-Type': 'application/json'}))  

Lors de la réception, vous devez utiliser l'analyseur de corps JSON pour analyser le corps req. https://www.npmjs.com/package/body-parser

Recevez

router.post('/signin', function (req, res) { 
    console.log(req.bod);   
}); 

J'utilise ici exprès que mon serveur de noeud. Dans votre app.js (server.js ou n'importe quel script principal), définissez l'analyseur de corps pour analyser les charges utiles JSON.

const express = require('express'); 
const bodyParser = require('body-parser'); 

const app = express(); 
app.use(bodyParser.json()); 
+0

https: // github.com/request/request # custom-http-headers, J'ai oublié de mentionner que j'utilise ce kit, qui semble avoir des fonctionnalités similaires, mais je ne sais pas comment l'utiliser –

+0

C'est pour le côté client non? Qu'est-ce que vous utilisez pour le côté serveur? –

+0

Le serveur node.js passe à un autre serveur node.js. –

2

Vous pouvez définir des en-têtes à l'aide de la propriété headers.

request.post({ 
    url:/localhost/transfer, 
    body: obj, 
    json: true 
},function(err,httpResponse,body){ 
    if(err){ 
     res.json({error:false}); 
    }else{ 
     res.json({error:true}); 
    } 
}); 

Vous pouvez également définir json: true, il ajoutera automatiquement l'en-tête et analyser aussi le corps de la réponse JSON.

+0

Ce n'est pas le travail. Le format n'a pas changé. –

+0

@AlbertChen Cela ne fonctionne pas car la propriété 'form' est utilisée dans' request.post() 'et' body' est manquant. Notez également qu'il n'est pas nécessaire de définir '" content-type ":" application/json "' ici, car 'json: true' l'ajoutera automatiquement. – shaochuancs