J'essaie simplement de créer un serveur de nœud qui génère le statut HTTP d'une URL donnée.
Quand j'essaye de vider la réponse avec res.write, j'obtiens l'erreur: throw new TypeError ('premier argument doit être une chaîne ou un tampon');
Mais si je les remplace par console.log, tout va bien (mais je dois les écrire dans le navigateur et non dans la console).
Le code est
var server = http.createServer(function (req, res) {
res.writeHead(200, {"Content-Type": "text/plain"});
request({
uri: 'http://www.google.com',
method: 'GET',
maxRedirects:3
}, function(error, response, body) {
if (!error) {
res.write(response.statusCode);
} else {
//response.end(error);
res.write(error);
}
});
res.end();
});
server.listen(9999);
Je crois que je devrais ajouter un rappel quelque part mais assez confus et toute aide est appréciée.
response.statusCode
est un nombre, par exempleresponse.statusCode === 200
non'200'
. Comme le message d'erreur l'indique,write
attend un objetstring
ouBuffer
, vous devez donc le convertir.Vous avez également raison à propos de votre commentaire de rappel.
res.end();
devrait être à l'intérieur du rappel, juste en dessous de voswrite
appels.la source
Je reçois ce message d'erreur et il mentionne les options.
J'avais ça à l'origine
Je l'ai changé en ceci:
et cela semble fonctionner maintenant sans le message d'erreur ... cela semble être un bug.
Je pense que c'est la façon la plus officielle de le faire:
la source
javascript request.post({ url: apiServerBaseUrl + '/v1/verify', json: { email: req.user.email } }
Eh bien, de toute évidence, vous essayez d'envoyer quelque chose qui n'est pas une chaîne ou un tampon. :) Cela fonctionne avec la console, car la console accepte tout. Exemple simple:
Une façon de convertir quoi que ce soit en chaîne est de le faire:
chaque fois que vous essayez d'envoyer quelque chose. L'autre façon consiste à appeler la
.toString()
méthode:Notez que ce n'est peut-être toujours pas ce que vous recherchez. Vous devriez toujours passer des chaînes / tampons à
.write
sans ces astuces.En remarque: je suppose que
request
c'est une opération asynchrone. Si c'est le cas, alorsres.end();
sera appelé avant toute écriture, c'est-à-dire que toute écriture échouera de toute façon (car la connexion sera fermée à ce stade). Déplacez cette ligne dans le gestionnaire:la source
si vous voulez écrire un objet JSON dans la réponse, changez le type de contenu de l'en-tête en application / json
la source
Et il y a une autre possibilité (pas dans ce cas) lorsque vous travaillez avec ajax (XMLhttpRequest), tout en renvoyant les informations au client, vous devez utiliser res.send (responsetext) au lieu de res.end (responsetext)
la source
L'erreur indique que le paramètre nécessaire à la fonction de coupure concernée n'est pas dans le format requis, c'est-à-dire chaîne ou tampon
La solution est de changer le paramètre en string
ou tampon
la source
Le premier argument doit être de type string ou Buffer. Objet de type reçu
J'obtenais comme l'erreur ci-dessus en passant des données corporelles au module de requête.
J'ai passé un autre paramètre qui est JSON: true et son fonctionnement.
la source