Saya bermain-main dengan Nodejs dan mengekspresikan dengan membangun API istirahat kecil. Pertanyaan saya adalah, apa praktik terbaik / cara terbaik untuk mengatur status kode, serta data respons?
Biarkan saya jelaskan dengan sedikit kode (saya tidak akan meletakkan node dan mengungkapkan kode yang diperlukan untuk memulai server, hanya metode router yang bersangkutan):
router.get('/users/:id', function(req, res, next) {
var user = users.getUserById(req.params.id);
res.json(user);
});
exports.getUserById = function(id) {
for (var i = 0; i < users.length; i++) {
if (users[i].id == id) return users[i];
}
};
Kode di bawah berfungsi dengan baik, dan saat mengirim permintaan dengan tukang pos, saya mendapatkan hasil berikut:
Seperti yang Anda lihat, statusnya menunjukkan 200, yang OK. Tetapi apakah ini cara terbaik untuk melakukan ini? Apakah ada kasus di mana saya harus mengatur status sendiri, serta JSON yang dikembalikan? Atau apakah itu selalu ditangani dengan ekspres?
Sebagai contoh, saya baru saja membuat tes cepat dan sedikit memodifikasi metode get di atas:
router.get('/users/:id', function(req, res, next) {
var user = users.getUserById(req.params.id);
if (user == null || user == 'undefined') {
res.status(404);
}
res.json(user);
});
Seperti yang Anda lihat, jika pengguna tidak ditemukan dalam array, saya hanya akan menetapkan status 404.
Sumber daya / saran untuk mempelajari lebih lanjut tentang topik ini lebih dari diterima.
Jawaban:
Referensi API Express mencakup kasus ini.
Lihat status dan kirim .
Singkatnya, Anda hanya perlu memanggil
status
metode sebelum meneleponjson
atausend
:sumber
res.sendStatus(400);
res.sendStatus(400);
mengirim data string juga, setara denganres.status(400).send('Not Found')
Anda bisa melakukannya dengan cara ini:
Ini akan mengatur kode status HTTP ke 400, berfungsi bahkan dalam 4 express.
sumber
express deprecated res.json(status, obj): Use res.status(status).json(obj) instead
Jadi,res.status(400).json(json_response)
akan akurat saat ini.res.status(500).send({ error: "boo:(" });
status 200 akan menjadi default saat menggunakan
res.send
,res.json
, dllAnda dapat mengatur status seperti
res.status(500).json({ error: 'something is wrong' });
Seringkali saya akan melakukan sesuatu seperti ...
Kemudian minta middleware kesalahan saya mengirim respons, dan melakukan hal lain yang perlu saya lakukan ketika ada kesalahan.
Selain itu:
res.sendStatus(status)
telah ditambahkan pada versi 4.9.0 http://expressjs.com/4x/api.html#res.sendStatussumber
Daftar Kode Status HTTP
Praktik yang baik mengenai respons status adalah, dapat diprediksi, mengirim kode status HTTP yang tepat tergantung pada kesalahan (4xx untuk kesalahan klien, 5xx untuk kesalahan server), mengenai respons JSON yang sebenarnya tidak ada "alkitab" tetapi ide yang bagus adalah untuk mengirim (lagi) status dan data sebagai 2 properti berbeda dari objek root dalam respons yang berhasil (dengan cara ini Anda memberi klien kesempatan untuk menangkap status dari header HTTP dan payload itu sendiri) dan properti ke-3 yang menjelaskan kesalahan dengan cara yang bisa dipahami manusia dalam kasus kesalahan.
Stripe API berperilaku serupa di dunia nyata.
yaitu
baik
Kesalahan
sumber
Saya menggunakan ini dalam aplikasi Express.js saya:
sumber
Cara standar untuk mendapatkan HttpResponse penuh yang mencakup properti berikut
Di backend , lakukan ini
Di Frontend misalnya dalam
Angular
, lakukan saja:sumber
sumber
sumber
Anda bisa melakukan ini
sumber
Cara terbaik untuk mengirim respons kesalahan adalah
return res.status(400).send({ message: 'An error has occurred' })
.Kemudian, di frontend Anda, Anda dapat menangkapnya menggunakan sesuatu seperti ini:
Masuk saja
err
tidak akan berfungsi, karena objek pesan terkirim Anda beradaerr.response.data
.Semoga itu bisa membantu!
sumber