Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 什么';这两者之间的区别是什么;“应用程序渲染”;及;res.render“;在express.js中?_Node.js_Express - Fatal编程技术网

Node.js 什么';这两者之间的区别是什么;“应用程序渲染”;及;res.render“;在express.js中?

Node.js 什么';这两者之间的区别是什么;“应用程序渲染”;及;res.render“;在express.js中?,node.js,express,Node.js,Express,以下文件: 使用使用呈现字符串响应的回调渲染视图。这是res.render()的应用程序级变体,在其他方面的行为与此相同 以下文件: 使用使用呈现字符串响应的回调渲染视图。当发生错误时,next(err)将在内部调用。当提供回调时,将传递可能的错误和呈现的字符串,并且不会执行自动响应 如何确定何时使用哪一个?在需要渲染视图但不通过http将其发送到客户端的场景中,使用app.render。html电子邮件浮现在脑海中 以下是一些区别: 您可以在根级别调用app.render,并且只能在路由/中间

以下文件:

使用使用呈现字符串响应的回调渲染视图。这是
res.render()
的应用程序级变体,在其他方面的行为与此相同

以下文件:

使用使用呈现字符串响应的回调渲染视图。当发生错误时,
next(err)
将在内部调用。当提供回调时,将传递可能的错误和呈现的字符串,并且不会执行自动响应


如何确定何时使用哪一个?

在需要渲染视图但不通过http将其发送到客户端的场景中,使用
app.render
。html电子邮件浮现在脑海中

以下是一些区别:

  • 您可以在根级别调用
    app.render
    ,并且只能在路由/中间件内部调用
    res.render

  • app.render
    始终在回调函数中返回
    html
    ,而
    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>
      
      var routes = require('routes');
      
      app.get('/mail', function(req, res) {
          // app object is available -> app.render
      })
      
      app.get('/sendmail', routes.sendmail);
      
      exports.sendmail = function(req, res) {
          // can't use app.render -> therefore res.render
      }
      
    • 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
      
      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
      
  • 在内部使用渲染模板文件

  • 您可以使用
    render
    函数创建html电子邮件。根据应用程序的结构,您可能并不总是能够访问
    app
    对象

    例如,在外部管线内:

    app.js

    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>
    
    var routes = require('routes');
    
    app.get('/mail', function(req, res) {
        // app object is available -> app.render
    })
    
    app.get('/sendmail', routes.sendmail);
    
    exports.sendmail = function(req, res) {
        // can't use app.render -> therefore res.render
    }
    

    routes.js

    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>
    
    var routes = require('routes');
    
    app.get('/mail', function(req, res) {
        // app object is available -> app.render
    })
    
    app.get('/sendmail', routes.sendmail);
    
    exports.sendmail = function(req, res) {
        // can't use app.render -> therefore res.render
    }
    

  • 除了这两个变体之外,还有
    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中作为路由提供

    @zeMicro缓存机制呢??
    app.render
    是否也使用它?如何在客户端获取标题键值?我正在使用HTML文件(ejs)