2011-12-22 24 views
7

Tôi có một tình huống mà tôi cần nhiều hiển thị xảy ra với cùng một đối tượng phản hồi trong ứng dụng ExpressJS. (Về cơ bản, một yêu cầu HTTP kích hoạt nhiều yêu cầu back-end, tất cả đều có thể bắt đầu hiển thị kết quả tới trang ngay khi chúng hoàn thành.) Vấn đề là tôi cần mỗi cái để render một view (tức là tôi không nghĩ mình có thể sử dụng res.write()), và theo như tôi có thể nói, không có cách nào cho res.render() để không kết thúc phản ứng hoặc viết tiêu đề mỗi khi nó được gọi.Làm cách nào để hiển thị nhiều lần trên cùng một đối tượng phản hồi bằng ExpressJS?

Tôi đang thiếu gì?

+1

Làm cách nào bạn có thể trả lời hai lần cho một yêu cầu HTTP? –

+0

Nó không đáp ứng hai lần - nó chỉ là tôi muốn có thể truyền đầu ra đến trang từ nhiều chức năng. Yêu cầu HTTP dẫn đến một số cuộc gọi API tới các dịch vụ khác tạo ra các phần của phản hồi. Thay vì chờ tất cả chúng phản hồi và hiển thị trang cùng một lúc, tôi muốn có đối tượng phản hồi vẫn "mở" để tôi có thể viết chế độ xem (chính xác hơn một phần xem) cho đến khi tất cả các cuộc gọi API hoàn tất. –

+0

Ah, 'res.write' sẽ là lựa chọn duy nhất của bạn sau đó. Tất nhiên, cũng có tùy chọn tải một phần của trang qua 'res.render', sau đó sử dụng AJAX để tải phần còn lại. –

Trả lời

8

nhanh biên dịch các mẫu sử dụng một động cơ như EJS, Jade, vv

Dữ liệu sau đó được trả lại bằng response.send: https://github.com/visionmedia/express/blob/master/lib/response.js#L76-131

Như bạn thấy đó, ở cuối có this.end..., mà có nghĩa là response.end (...).

Nếu bạn muốn đạt được nhiều lượt xem, bạn phải tự mình biên dịch các chế độ xem đó bằng cách sử dụng công cụ xem và sau đó tạo một hàm tương tự như response.send (mà tôi đã cung cấp cho bạn liên kết ở trên), nhưng hãy cẩn thận không gửi tiêu đề hai lần hoặc gọi response.end trước khi lần xem cuối cùng được hiển thị.

+3

Tôi đã chấp nhận câu trả lời này bởi vì nó là giải pháp kỹ thuật phù hợp nhất. Trong trường hợp của tôi, tôi đã thiết kế lại cách tôi đã thực hiện nhiều cuộc gọi để tổng hợp các phản hồi và chỉ hiển thị một lần vì nó có vẻ như là một cách tiếp cận tốt hơn. hướng dẫn của alessioalex là tại chỗ mặc dù đối với bất kỳ ai muốn tiếp cận điều này - con trỏ tới mã chính xác là nơi bạn cần bắt đầu. –

Các vấn đề liên quan