nodejs - premier argument doit être une chaîne ou de la mémoire Tampon lors de l'utilisation de la réponse.écrire avec http.demande
Je suis simplement en train d'essayer de créer un nœud de serveur qui génère le code d'état HTTP de une URL donnée.
Quand j'ai essayer de vider la réponse avec res.écrire, j'obtiens l'erreur: throw new exception TypeError ("premier argument doit être une chaîne ou un Tampon");
Mais si je les remplacer avec de la console.journal, tout va bien (mais j'ai besoin d'écrire pour le navigateur de 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 dois ajouter un rappel de quelque part, mais assez confus et toute aide est appréciée.
Vous devez vous connecter pour publier un commentaire.
Demande est une méthode de rappel, son async! Donc je suis en supposant que, par le temps que le rappel est exécuté le
res.end()
pourrait être appelé. Essayez de clôture de la demande dans le rappel.response.statusCode
est un nombre, par exempleresponse.statusCode === 200
, pas'200'
. Comme le message d'erreur dit,write
s'attend à unstring
ouBuffer
, donc vous devez le convertir.Vous sont également correctes au sujet de votre rappel commentaire si.
res.end();
doit être à l'intérieur de la fonction de rappel, juste en dessous de votrewrite
appels.J'obtiens ce message d'erreur et il mentionne des options.corps
J'ai eu cette origine
Je l'ai changé pour cette:
et il semble maintenant fonctionner sans le message d'erreur...semble être un bug si.
Je pense que c'est le plus officiel de la façon de le faire:
javascript request.post({ url: apiServerBaseUrl + '/v1/verify', json: { email: req.user.email } }
Bien, évidemment, vous essayez d'envoyer quelque chose qui n'est pas une chaîne ou un tampon. 🙂 Il fonctionne avec la console, parce que la console accepte quoi que ce soit. Exemple Simple:
Un moyen de convertir rien à chaîne est de le faire:
chaque fois que vous essayez d'envoyer quelque chose. L'autre façon est d'appeler
.toString()
méthode:Noter qu'il pourrait ne pas être ce que vous cherchez. Vous devez toujours passer des chaînes/tampons à
.write
sans ces tours.Comme une note de côté: je suppose que
request
est une opération asynchrone. Si c'est le cas, alorsres.end();
sera appelée avant toute écriture, c'est à dire toute l'écriture va échouer de toute façon ( parce que la connexion sera fermée à ce point ). Déplacer cette ligne dans le gestionnaire de:si tu veux écrire un objet JSON pour la réponse alors modifier l'en-tête de type de contenu application/json
Et il y a une autre possibilité (pas dans ce cas) lorsque l'on travaille avec de l'ajax(XMLhttpRequest), lors de l'envoi d'informations vers le client en fin de compte, vous devez utiliser res.envoyer(responsetext) au lieu de res.fin(responsetext)
Le message d'erreur indique que le paramètre nécessaire à la rupture de la fonction n'est pas dans le format requis, c'est à dire de chaîne ou de Tampon
La solution est de changer le paramètre de chaîne de
ou tampon