Cara yang tepat untuk mengembalikan JSON menggunakan node atau Express
Jadi, satu dapat mencoba untuk mengambil berikut objek JSON:
$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=ISO-8859-1
Date: Wed, 30 Oct 2013 22:19:10 GMT
Server: Google Frontend
Cache-Control: private
Alternate-Protocol: 80:quic,80:quic
Transfer-Encoding: chunked
{
"anotherKey": "anotherValue",
"key": "value"
}
$
Apakah ada cara untuk menghasilkan persis sama tubuh dalam respon dari server menggunakan node atau express? Jelas, seseorang dapat mengatur header dan menunjukkan bahwa kandungan-jenis respon yang akan menjadi "application/json", tapi kemudian ada berbagai cara untuk menulis/mengirim objek. Salah satu yang saya telah melihat yang umum digunakan adalah dengan menggunakan perintah dalam bentuk:
response.write(JSON.stringify(anObject));
Namun, ini memiliki dua poin di mana orang bisa berpendapat seolah-olah mereka "masalah":
- Kami mengirimkan sebuah string.
- Selain itu, tidak ada karakter baris baru pada akhirnya.
Ide lain adalah dengan menggunakan perintah:
response.send(anObject);
Hal ini tampaknya mengirim objek JSON berdasarkan output dari curl mirip dengan contoh pertama di atas. Namun, tidak ada karakter baris baru pada akhir tubuh ketika curl lagi digunakan pada terminal. Jadi, bagaimana seseorang dapat benar-benar menulis sesuatu seperti ini dengan karakter baris baru ditambahkan di akhir menggunakan node atau node/express?
Tanggapan itu adalah sebuah string juga, jika anda ingin mengirim respon dipercantik, untuk beberapa canggung alasan, anda bisa menggunakan sesuatu seperti
JSON.stringify(dariobjek, null, 3)
It's penting bahwa anda menetapkan
Content-Type
headerapplication/json
, juga.Dipercantik:
I'm tidak yakin mengapa anda ingin menghentikan itu dengan newline, tapi anda hanya bisa melakukan
JSON.stringify(...) + '\n'
untuk mencapai itu.Express
Di express anda dapat melakukan ini dengan mengubah pilihan bukan.
Not benar-benar dianjurkan untuk mengatur untuk 40
Maka anda hanya bisa merespon dengan beberapa json.
It'll gunakan
'json ruang
' konfigurasi untuk mendandani itu.Sejak Express.js 3x respon objek json() metode yang menetapkan semua header dengan benar untuk anda dan mengembalikan respon dalam format JSON.
Contoh:
Jika anda mencoba untuk mengirim sebuah file json anda dapat menggunakan stream
jika u're menggunakan Express u dapat menggunakan ini:
atau ini hanya
Anda bisa mendandani menggunakan pipa dan salah satu dari banyak prosesor. Aplikasi anda harus selalu respon dengan beban kecil mungkin.
https://github.com/ddopson/underscore-cli
Anda dapat menggunakan middleware untuk mengatur default Content-Type, dan mengatur Konten-Tipe berbeda untuk Api. Berikut ini sebuah contoh:
The
res.json()
fungsi harus cukup untuk sebagian besar kasus.aplikasi.dapatkan('/', (req, res) => res.json({ menjawab: 42 }));
The
res.json()
fungsi untuk mengkonversi parameter anda lulus ke JSON menggunakanJSON.stringify()
dan setContent-Type
header untukapplication/json; charset=utf-8
jadi HTTP klien tahu untuk secara otomatis mem-respon.Versi Express menggunakan
app.menggunakan(express.json())
ataubodyParser.json()
baca lebih lanjut tentang bodyParser middlewarePada versi terbaru dari express kami hanya bisa menggunakan
res.json()
Untuk header setengah dari pertanyaan, saya'm akan memberikan berteriak ke
res.jenis
berikut ini:setara dengan
Sumber: express docs: