Я просто пытаюсь создать сервер узла, который выводит HTTP-статус данного URL-адреса.
Когда я пытаюсь сбросить ответ с помощью res.write, я получаю сообщение об ошибке: throw new TypeError («первый аргумент должен быть строкой или буфером»);
Но если я заменю их на console.log, все будет хорошо (но мне нужно записать их в браузер, а не в консоль).
Код
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);
Я считаю, что я должен добавить обратный вызов где-нибудь, но довольно запутан, и любая помощь приветствуется.
response.statusCode
число, напримерresponse.statusCode === 200
, нет'200'
. Как говорится в сообщении об ошибке,write
ожидает объектstring
илиBuffer
, поэтому вы должны его преобразовать.Однако вы также правы в своем комментарии к обратному вызову.
res.end();
должен быть внутри обратного вызова, чуть ниже вашихwrite
вызовов.источник
Я получаю это сообщение об ошибке, в котором упоминается options.body
У меня было это изначально
request.post({ url: apiServerBaseUrl + '/v1/verify', body: { email: req.user.email } });
Я изменил его на это:
request.post({ url: apiServerBaseUrl + '/v1/verify', body: JSON.stringify({ email: req.user.email }) });
и, похоже, теперь он работает без сообщения об ошибке ... хотя кажется, что это ошибка.
Я думаю, что это более официальный способ сделать это:
request.post({ url: apiServerBaseUrl + '/v1/verify', json: true, body: { email: req.user.email } });
источник
javascript request.post({ url: apiServerBaseUrl + '/v1/verify', json: { email: req.user.email } }
Что ж, очевидно, вы пытаетесь отправить что-то, что не является строкой или буфером. :) С консолью работает, потому что консоль принимает все что угодно. Простой пример:
var obj = { test : "test" }; console.log( obj ); // works res.write( obj ); // fails
Один из способов преобразовать что-либо в строку - это сделать:
res.write( "" + obj );
всякий раз, когда вы пытаетесь что-то отправить. Другой способ - вызвать
.toString()
метод:Обратите внимание, что это может быть не то, что вы ищете. Вы всегда должны передавать строки / буферы
.write
без таких уловок.В качестве примечания: я предполагаю, что
request
это асинхронная операция. Если это так, thenres.end();
будет вызываться перед любой записью, т. Е. Любая запись все равно завершится неудачно (потому что в этот момент соединение будет закрыто). Переместите эту строку в обработчик: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( ); });
источник
если вы хотите записать объект JSON в ответ, измените тип содержимого заголовка на application / json
response.writeHead(200, {"Content-Type": "application/json"}); var d = new Date(parseURL.query.iso); var postData = { "hour" : d.getHours(), "minute" : d.getMinutes(), "second" : d.getSeconds() } response.write(postData) response.end();
источник
И есть еще одна возможность (не в этом случае) при работе с ajax (XMLhttpRequest), при отправке информации обратно на клиентскую часть вы должны использовать res.send (responsetext) вместо res.end (responsetext)
источник
Ошибка говорит о том, что параметр, необходимый для соответствующей функции прерывания, не находится в требуемом формате, то есть в строке или буфере.
Решение - изменить параметр на строку
breakingFunction(JSON.stringify(offendingParameter), ... other params...);
или буфер
источник
Первый аргумент должен быть строкового типа или буфера. Полученный объект типа
Когда я передавал данные тела модулю запроса, я получал указанную выше ошибку.
Я передал еще один параметр - JSON: true и его рабочий.
var option={ url:"https://myfirstwebsite/v1/appdata", json:true, body:{name:'xyz',age:30}, headers://my credential } rp(option) .then((res)=>{ res.send({response:res});}) .catch((error)=>{ res.send({response:error});})
источник