Sự khác biệt giữa res.send và res.json trong Express.js


200

Sự khác biệt thực sự giữa res.sendres.jsonvì cả hai dường như thực hiện cùng một hoạt động trả lời khách hàng.


73
Hãy dành một chút thời gian để lưu ý cách những người đăng câu trả lời vừa vào github và đọc mã nguồn. Đây là một thói quen tốt để tìm hiểu và thiết lập. Sự thật nằm trong Nguồn.
Peter Lyons

31
@PeterLyons Tôi đồng ý đây là một thói quen tốt, nhưng ý bạn là ram nên xem nguồn thay vì đặt câu hỏi? Điều này không đánh bại mục đích của trang web này? Sự hiện diện của câu hỏi này, với các câu trả lời đề cập đến một nguồn tốt (Nguồn!) Là hữu ích.
LinusR

3
Vâng, dạy một người đàn ông để câu cá và tất cả.
Peter Lyons

71
Khi chúng ta được thông báo "RTFS" (Đọc Nguồn), điều đó thực sự có nghĩa là các tài liệu không truyền đạt được những gì họ cần. Có, có nguồn cho phép chúng tôi kiểm tra nó, nhưng người ta không cần phải lấy nó ngoại trừ trong các trường hợp tối nghĩa. Tất cả các tính năng Express này thực sự tuyệt vời, nhưng các tài liệu bị thiếu rất nhiều. SO có rất nhiều câu hỏi về Express những điều mà mọi người không thể hiểu được từ các tài liệu (xảy ra với tôi).
Juan Lanus

3
Đôi khi nguồn đọc không đủ và vì một lời giải thích tốt có thể phát sinh từ câu trả lời, điều này sẽ đảm bảo sự hiểu biết tốt nhất về khái niệm liên quan. Một số người chỉ đơn giản là đọc nguồn và hiểu, nhưng những người mới bắt đầu không nhất thiết phải thân thiện với javascript thì sao? Hãy suy nghĩ về nó.
cram2208

Câu trả lời:


210

Các phương thức giống hệt nhau khi một đối tượng hoặc mảng được truyền, nhưng res.json()cũng sẽ chuyển đổi các đối tượng không, chẳng hạn như nullundefinedkhông phải là JSON hợp lệ.

Phương thức này cũng sử dụng các cài đặt json replacerjson spacesứng dụng, vì vậy bạn có thể định dạng JSON với nhiều tùy chọn hơn. Các tùy chọn này được đặt như vậy:

app.set('json spaces', 2);
app.set('json replacer', replacer);

Và được thông qua JSON.stringify()như vậy:

JSON.stringify(value, replacer, spacing);
// value: object to format
// replacer: rules for transforming properties encountered during stringifying
// spacing: the number of spaces for indentation

Đây là mã trong res.json()phương thức mà phương thức gửi không có:

var app = this.app;
var replacer = app.get('json replacer');
var spaces = app.get('json spaces');
var body = JSON.stringify(obj, replacer, spaces);

Phương thức kết thúc như một res.send()kết thúc:

this.charset = this.charset || 'utf-8';
this.get('Content-Type') || this.set('Content-Type', 'application/json');

return this.send(body);


16

Tìm kiếm trong các tiêu đề được gửi ...
res.send sử dụng loại nội dung: text / html
res.json sử dụng loại nội dung: application / json


0

res.jsonbuộc đối số thành JSON. res.sendsẽ lấy một đối tượng hoặc mảng không phải json và gửi một kiểu khác. Ví dụ:

Điều này sẽ trả về một số JSON.

res.json(100)

Điều này sẽ trả về mã trạng thái và đưa ra cảnh báo để sử dụng sendStatus.

res.send(100)

Nếu đối số của bạn không phải là một đối tượng hoặc mảng JSON (null, không xác định, boolean, chuỗi) và bạn muốn đảm bảo nó được gửi dưới dạng JSON, hãy sử dụng res.json.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.