Pon*_*oni 5 javascript ejs node.js express
res.render("index.ejs", {});
Run Code Online (Sandbox Code Playgroud)
对于简单的情况,上面的内容就可以了。
如何让 EJS 返回处理后的字符串作为函数的返回值?让它像这样工作:
res.send(ejs.render("index.ejs", {}));
Run Code Online (Sandbox Code Playgroud)
换句话说 -我想嵌套/链接一些 render() 调用,而不是异步调用。
Express 似乎本身并不支持此功能,是吗?
如果没有,那我如何直接通过EJS实现呢?
如果您想知道为什么我更喜欢“坏”方式(同步),那么我有一件事要说:缓存。
无论如何,模板都会被缓存,所以我不介意模板的第一次加载速度较慢(无论如何只有几毫秒)。
与必须处理对 render() 的嵌套异步调用相比,时间分数的单次延迟成本是没有成本的。
您只需传递一个回调函数,res.render将使用渲染的字符串调用该回调函数。这将完成,async这是解决此问题的正确方法,因为渲染可能需要读取文件。
app.get('/', function(req, res){
res.render('index', { title: 'Title' }, function(err, result) {
res.render('index2', {foo: 'data'}, function (err, result2) {
console.log('Render result:');
console.log(result2);
res.send(result2); // send rendered HTML back to client
});
});
});
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢嵌套回调,我建议您查看异步库,例如适当的名称async。您可以使用瀑布(https://github.com/caolan/async#waterfall)函数来执行此操作:
async.waterfall([
function(done) {
res.render('index', {title: 'Title'}, done);
},
function(result, done) { // result is the result of the first render
res.render( result, {foo: 'data'}, done);
}
], function (err, result) { // result is the result of the second render
console.log(result);
res.send(result);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5627 次 |
| 最近记录: |