Estou simplesmente tentando criar um servidor de nó que produza o status HTTP de um determinado URL.
Quando tento liberar a resposta com res.write, recebo o erro: throw new TypeError ('o primeiro argumento deve ser uma string ou buffer');
Mas se eu substituí-los por console.log, está tudo bem (mas preciso gravá-los no navegador, não no console).
O código é
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);
Eu acredito que devo adicionar um retorno de chamada em algum lugar, mas muito confuso e qualquer ajuda é apreciada.
response.statusCode
é um número, por exemploresponse.statusCode === 200
, não'200'
. Como diz a mensagem de erro,write
espera um objetostring
ouBuffer
, portanto, você deve convertê-lo.Você também está correto sobre o seu comentário de retorno de chamada.
res.end();
deve estar dentro do retorno de chamada, logo abaixo de suaswrite
chamadas.fonte
Recebo esta mensagem de erro e menciona options.body
Eu tinha isso originalmente
Eu mudei para este:
e parece funcionar agora sem a mensagem de erro ... parece um bug.
Acho que esta é a maneira mais oficial de fazer isso:
fonte
javascript request.post({ url: apiServerBaseUrl + '/v1/verify', json: { email: req.user.email } }
Bem, obviamente você está tentando enviar algo que não é uma string ou buffer. :) Funciona com console, porque o console aceita qualquer coisa. Exemplo simples:
Uma maneira de converter qualquer coisa em string é fazer isso:
sempre que você está tentando enviar algo. A outra maneira é chamar o
.toString()
método:Observe que ainda pode não ser o que você está procurando. Você deve sempre passar strings / buffers
.write
sem tais truques.Como observação: presumo que
request
seja uma operação assíncrona. Se for esse o caso, entãores.end();
será chamado antes de qualquer escrita, ou seja, qualquer escrita irá falhar de qualquer maneira (porque a conexão será encerrada nesse ponto). Mova essa linha para o manipulador:fonte
se você quiser gravar um objeto JSON na resposta, altere o tipo de conteúdo do cabeçalho para application / json
fonte
E há outra possibilidade (não neste caso) ao trabalhar com ajax (XMLhttpRequest), ao enviar informações de volta para o cliente final, você deve usar res.send (responsetext) em vez de res.end (responsetext)
fonte
O erro diz que o parâmetro necessário para a função de quebra em questão não está no formato exigido, ou seja, string ou Buffer
A solução é mudar o parâmetro para string
ou buffer
fonte
O primeiro argumento deve ser do tipo string ou Buffer. Objeto de tipo recebido
Eu estava recebendo o erro acima ao passar os dados do corpo para o módulo de solicitação.
Passei outro parâmetro que é JSON: true e está funcionando.
fonte