2013-09-27 244 views
154

Sự khác nhau thực sự giữa res.sendres.json vì cả hai dường như thực hiện cùng một hoạt động phản hồi với khách hàng.Sự khác biệt giữa res.send và res.json trong Express.js

+58

Dành một chút thời gian để lưu ý cách mọi người đăng câu trả lời chỉ đến github và đọc mã nguồn. Đây là một thói quen tốt để học và thiết lập. Sự thật nằm trong Nguồn. –

+7

@PeterLyons Sử dụng Nguồn, Luke! – wprl

+24

@PeterLyons Tôi đồng ý đây là một thói quen tốt, nhưng bạn có nghĩa là ram nên đã xem xét 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âu trả lời đề cập đến một nguồn tốt (The Source!) Rất hữu ích. – LinusR

Trả lời

168

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

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

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

Và truyền cho một 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 phương pháp res.json() rằng send phương pháp 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 pháp kết thúc bằng res.send() cuối cùng:

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

return this.send(body); 
6

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