[node.js] express.js에서“app.render”와“res.render”의 차이점은 무엇입니까?

에 대한 문서 app.render:

렌더링 된 문자열로 응답하는 콜백으로 뷰를 렌더링합니다. 이는의 앱 수준 변형 res.render()이며 그렇지 않으면 동일한 방식으로 작동합니다.

에 대한 문서 res.render:

렌더링 된 문자열로 응답하는 콜백으로 뷰를 렌더링합니다. 오류가 발생하면 next(err)내부적으로 호출됩니다. 콜백이 제공되면 가능한 오류와 렌더링 된 문자열이 모두 전달되고 자동 응답이 수행되지 않습니다.

어느 것을 언제 사용해야하는지 어떻게 알 수 있습니까?



답변

다음은 몇 가지 차이점입니다.

  1. 당신은 호출 할 수 있습니다 app.render루트 수준res.render단지 경로 / 미들웨어 내부 .

  2. app.render항상 html in the callback function을 반환하는 반면 res.render콜백 함수를 세 번째 매개 변수로 지정한 경우에만 반환합니다 . res.render세 번째 매개 변수 / 콜백 함수없이 호출 하면 렌더링 된 html이 상태 코드와 함께 클라이언트로 전송됩니다 200.

    다음 예를 살펴보십시오.

    • 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 세 번째 매개 변수없이

      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 세 번째 매개 변수

      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.renderapp.render템플릿 파일을 렌더링하기 위해 내부적으로 사용 합니다.

  4. render기능을 사용하여 html 이메일 을 작성할 수 있습니다 . 앱의 구조에 따라 항상 app개체에 대한 액세스 권한이있는 것은 아닙니다 .

    예를 들어 외부 경로 내부 :

    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
    }
    


답변

app.render보기를 렌더링해야하지만 http를 통해 클라이언트로 보내지 않는 시나리오에서 사용 합니다. html 이메일이 떠 오릅니다.


답변

이 두 가지 변형과 함께 jade.renderFile클라이언트에 전달할 필요가없는 html을 생성하는 것도 있습니다.

용법-

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() app.js에서 경로로 사용할 수 있습니다.


답변