文档app.render
:
渲染一个带有回调的视图,该回调响应渲染的字符串。这是 的应用程序级变体
res.render()
,其他方面的行为方式相同。
文档res.render
:
渲染一个带有回调的视图,该回调响应渲染的字符串。发生错误时
next(err)
在内部调用。当提供回调时,可能的错误和呈现的字符串都会被传递,并且不会执行自动响应。
我如何确定何时使用哪一个?
文档app.render
:
渲染一个带有回调的视图,该回调响应渲染的字符串。这是 的应用程序级变体
res.render()
,其他方面的行为方式相同。
文档res.render
:
渲染一个带有回调的视图,该回调响应渲染的字符串。发生错误时
next(err)
在内部调用。当提供回调时,可能的错误和呈现的字符串都会被传递,并且不会执行自动响应。
我如何确定何时使用哪一个?
以下是一些区别:
您可以app.render
在根级别调用,并且res.render
只能在 route/middleware 内部调用。
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>
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
来渲染模板文件。
您可以使用这些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 中的路由使用。