Saya hanya mencoba membuat server node yang menampilkan status HTTP dari URL tertentu.
Ketika saya mencoba untuk menghilangkan respon dengan res.write, saya mendapatkan error: throw new TypeError ('argumen pertama harus berupa string atau Buffer');
Tetapi jika saya menggantinya dengan console.log, semuanya baik-baik saja (tapi saya perlu menuliskannya ke browser, bukan konsol).
Kodenya adalah
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);
Saya yakin saya harus menambahkan panggilan balik di suatu tempat tetapi cukup bingung dan bantuan apa pun dihargai.
response.statusCode
adalah angka, mis.response.statusCode === 200
, bukan'200'
. Seperti pesan kesalahan mengatakan,write
mengharapkanstring
atauBuffer
objek, jadi Anda harus mengubahnya.Anda juga benar tentang komentar panggilan balik Anda.
res.end();
harus berada di dalam panggilan balik, tepat di bawahwrite
panggilan Anda .sumber
Saya mendapatkan pesan kesalahan ini dan menyebutkan options.body
Saya memiliki ini awalnya
request.post({ url: apiServerBaseUrl + '/v1/verify', body: { email: req.user.email } });
Saya mengubahnya menjadi ini:
request.post({ url: apiServerBaseUrl + '/v1/verify', body: JSON.stringify({ email: req.user.email }) });
dan tampaknya berfungsi sekarang tanpa pesan kesalahan ... tampaknya seperti bug.
Saya pikir ini adalah cara yang lebih resmi untuk melakukannya:
request.post({ url: apiServerBaseUrl + '/v1/verify', json: true, body: { email: req.user.email } });
sumber
javascript request.post({ url: apiServerBaseUrl + '/v1/verify', json: { email: req.user.email } }
Nah, jelas Anda mencoba mengirim sesuatu yang bukan string atau buffer. :) Ia bekerja dengan konsol, karena konsol menerima apa saja. Contoh sederhana:
var obj = { test : "test" }; console.log( obj ); // works res.write( obj ); // fails
Salah satu cara untuk mengubah apa pun menjadi string adalah dengan melakukan itu:
res.write( "" + obj );
kapan pun Anda mencoba mengirim sesuatu. Cara lain adalah dengan memanggil
.toString()
metode:Perhatikan bahwa itu mungkin masih bukan yang Anda cari. Anda harus selalu meneruskan string / buffer ke
.write
tanpa trik seperti itu.Sebagai catatan tambahan: Saya berasumsi bahwa itu
request
adalah operasi yang tidak sinkron. Jika demikian, makares.end();
akan dipanggil sebelum tulisan apapun, yaitu tulisan apapun akan tetap gagal (karena koneksi akan ditutup pada saat itu). Pindahkan baris itu ke dalam pawang: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( ); });
sumber
jika Anda ingin menulis objek JSON ke respons, ubah jenis konten header ke 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();
sumber
Dan ada kemungkinan lain (tidak dalam kasus ini) ketika bekerja dengan ajax (XMLhttpRequest), saat mengirim informasi kembali ke klien, Anda harus menggunakan res.send (responsetext) daripada res.end (responsetext)
sumber
Kesalahan mengatakan bahwa parameter yang diperlukan untuk fungsi pemutusan yang bersangkutan tidak dalam format yang diperlukan yaitu string atau Buffer
Solusinya adalah mengubah parameter menjadi string
breakingFunction(JSON.stringify(offendingParameter), ... other params...);
atau penyangga
sumber
Argumen pertama harus salah satu dari jenis string atau Buffer. Objek tipe yang diterima
Saya mendapatkan kesalahan seperti di atas saat mengirimkan data tubuh ke modul permintaan.
Saya telah melewati parameter lain yaitu JSON: true dan kerjanya.
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});})
sumber