express.js中“app.render”和“res.render”有什么区别?
app.render
文档:
用渲染的string回应callback视图。 这是
res.render()
的应用程序级变体,否则performance方式相同。
res.render
文件:
用渲染的string回应callback视图。 当下一个错误
next(err)
被内部调用时。 当提供callback时,可能的错误和呈现的string都被传递,并且不执行自动响应。
有人能帮我弄清楚何时使用哪一个?
这里有一些区别:
-
你可以在根级调用
app.render
, 在路由/中间件内调用app.render
。 -
app.render
总是返回callback函数中的html
,而res.render
只有当你指定callback函数作为第三个参数res.render
这样做。 如果在不使用第三个参数/callback函数的情况下调用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
-
-
res.render
app.render
内部使用app.render
来渲染模板文件。 -
您可以使用
render
function来创buildHTML电子邮件 。 根据您的应用程序的结构,您可能并不总是访问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 }
在需要呈现视图但不通过http发送给客户端的场景中使用app.render
。 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中可用作路由。