Sự khác biệt giữa “app.render” và “res.render” trong express.js là gì?


82

Tài liệu cho app.render:

Hiển thị một chế độ xem với một cuộc gọi lại phản hồi với chuỗi được kết xuất. Đây là biến thể cấp ứng dụng của res.render()và hoạt động theo cách khác.

Tài liệu cho res.render:

Hiển thị một chế độ xem với một cuộc gọi lại phản hồi với chuỗi được kết xuất. Khi một lỗi xảy ra next(err)được gọi nội bộ. Khi một lệnh gọi lại được cung cấp, cả lỗi có thể xảy ra và chuỗi hiển thị đều được chuyển và không có phản hồi tự động nào được thực hiện.

Làm thế nào tôi có thể tìm ra khi nào sử dụng cái nào?

Câu trả lời:


146

Dưới đây là một số khác biệt:

  1. Bạn có thể gọi app.rendercấp cơ sởres.renderchỉ bên trong một tuyến đường / phần mềm trung gian .

  2. app.renderluôn trả về html trong hàm gọi lại , trong khi res.renderchỉ trả về khi bạn đã chỉ định hàm gọi lại làm tham số thứ ba. Nếu bạn gọi res.rendermà không có tham số thứ ba / hàm gọi lại, html được kết xuất sẽ được gửi đến máy khách với mã trạng thái là 200.

    Hãy xem các ví dụ sau.

    • app.render

      app.render('index', {title: 'res vs app render'}, function(err, html) {
          console.log(html)
      });
      
      // logs the following string (from default index.jade)
      <!DOCTYPE html><html><head><title>res vs app render</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>res vs app render</h1><p>Welcome to res vs app render</p></body></html>
      
    • res.render không có tham số thứ ba

      app.get('/render', function(req, res) {
          res.render('index', {title: 'res vs app render'})
      })
      
      // also renders index.jade but sends it to the client 
      // with status 200 and content-type text/html on GET /render
      
    • res.render với tham số thứ ba

      app.get('/render', function(req, res) {
          res.render('index', {title: 'res vs app render'}, function(err, html) {
              console.log(html);
              res.send('done');
          })
      })
      
      // logs the same as app.render and sends "done" to the client instead 
      // of the content of index.jade
      
  3. res.rendersử dụng app.rendernội bộ để hiển thị tệp mẫu.

  4. Bạn có thể sử dụng các renderchức năng để tạo email html . Tùy thuộc vào cấu trúc ứng dụng của bạn, không phải lúc nào bạn cũng có quyền truy cập vào appđối tượng.

    Ví dụ bên trong một tuyến đường bên ngoài:

    app.js

    var routes = require('routes');
    
    app.get('/mail', function(req, res) {
        // app object is available -> app.render
    })
    
    app.get('/sendmail', routes.sendmail);
    

    routes.js

    exports.sendmail = function(req, res) {
        // can't use app.render -> therefore res.render
    }
    

@zeMicro thì sao về cơ chế cache ?? Là app.rendersử dụng nó quá?
fider

Làm thế nào để có được tiêu đề Giá trị chính ở phía khách hàng? Tôi đang sử dụng tệp HTML (ejs)
Mangesh Sathe

23

sử dụng app.rendertrong các tình huống mà bạn cần hiển thị một chế độ xem nhưng không gửi nó đến một máy khách qua http. email html xuất hiện trong tâm trí.


1

cùng với hai biến thể này, cũng có biến thể jade.renderFiletạo html mà không cần chuyển cho máy khách.

sử dụng-

var jade = require('jade');

exports.getJson = getJson;

function getJson(req, res) {
    var html = jade.renderFile('views/test.jade', {some:'json'});
    res.send({message: 'i sent json'});
}

getJson() có sẵn dưới dạng một tuyến trong app.js.

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.