Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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 将异步对象传递给dustjs模板_Node.js_Dust.js - Fatal编程技术网

Node.js 将异步对象传递给dustjs模板

Node.js 将异步对象传递给dustjs模板,node.js,dust.js,Node.js,Dust.js,我很难理解如何将从数据库获取的对象传递到dust.js模板 假设我有一个模板: {#person} {name} - {title} {/person} 我尝试设置如下内容: var ctx = { person: return chunk.map(function(chunk) { database.person(12345, function(data) { dust.nextTick(function() {

我很难理解如何将从数据库获取的对象传递到dust.js模板

假设我有一个模板:

{#person}
{name} - {title}
{/person}
我尝试设置如下内容:

var ctx = {
     person: return chunk.map(function(chunk) {
         database.person(12345, function(data) {
            dust.nextTick(function() {
                    chunk.end(data); // What to really do here?
            });
         });
    });
}
其中database.person从数据库获取对象并将其传递给回调

然后我将运行渲染函数:

res.render('person', ctx);

我假设您的db调用将返回与json对象类似的内容,如下面的“数据”

异步代码看起来不错。write将只写出您提供的任何内容,以便您需要在上下文中传递数据,以便可以在模板中访问它。使用chunk.render而不是write。非异步示例如下:

{
    "person": function(chunk, context, bodies) {
        var data = {name:"Smith", title:"Mr"};
        return chunk.render(bodies.block, context.push(data));
    }
}
把这一点通读一遍似乎得到了正确的答案

希望有帮助, 艾伦

正确的形式是:

var ctx = {
    person: function(chunk, context, bodies) {
        return chunk.map(function(chunk) {
            database.person(1234, function(data) {
                return chunk.render(bodies.block, context.push(data)).end();
            });
        });
    }
}
我没有写信,而是像艾伦的回答那样打电话给render

整个db调用必须包含在return chunk.map调用中才能工作。我还必须链接一个end命令以将结果发送回流

dust.js指南()中说明了为什么需要这些调用:

map告诉Dust制造一个新的块,并在其中保留一个槽 输出流,然后继续渲染 模板。您必须(最终)对映射的块调用chunk.end() 将其内容编织回流中


这是LinkedIn指南页面中没有提到的问题。

谢谢你,艾伦!你的回答把我引向正确的方向。我必须将db调用包装在返回chunk.map(…)中,并将一个.end()链接到render函数的末尾。在调用res.render并将其作为上下文的一部分传入之前,应该先执行db调用。