Node.js 有没有办法创建由服务器处理产生的动态部分?

Node.js 有没有办法创建由服务器处理产生的动态部分?,node.js,express,ejs,partials,embedded-javascript,Node.js,Express,Ejs,Partials,Embedded Javascript,我已经开始使用NodeJS好几个月了,我在局部渲染方面遇到了一个小问题。 我希望在一些模板中包含一个局部视图,但我希望这个局部视图是从服务器动态生成的(因为它依赖于从DB和其他东西检索到的数据) 我试图创建一个模板帮助器来实现这一点,但由于处理需要异步完成,因此我无法在模板中编写html返回 基本上,对我来说最好的是类似的东西(此代码显然不起作用): 模板文件.js ... <div> <%- generatePartial(data) %> </div&g

我已经开始使用NodeJS好几个月了,我在局部渲染方面遇到了一个小问题。 我希望在一些模板中包含一个局部视图,但我希望这个局部视图是从服务器动态生成的(因为它依赖于从DB和其他东西检索到的数据)

我试图创建一个模板帮助器来实现这一点,但由于处理需要异步完成,因此我无法在模板中编写html返回

基本上,对我来说最好的是类似的东西(此代码显然不起作用):

模板文件.js

...
<div>
    <%- generatePartial(data) %>
</div>
...
module.exports = function registerAppHelpers(request, response, next)
{
var appHelpers = {};

appHelpers.generatePartial = function generatePartial(data)
{
    if (request.isAuthenticated())
    {
        DB.findOne({ id: request.user.id }, function found(error, obj)
        {
            if (error)
                ...

            if (obj)
            {
                return generatePartial1(data);
            }
            else
            {
                return generatePartial2(data);
            }
        });
    }
    else
    {
        return generatePartial3(data);
    }
};

// Register the helpers as local variables to be accessed within a template.
for (var helper in appHelpers) {
    response.locals[helper] = appHelpers[helper];
}

next();
};
现在,我可能完全错了我想处理这个问题的方法,所以如果你有任何解决方案/其他建议,请不要犹豫


注:我使用ExpressJS和EJS。

我认为你完全走错了方向

  • ejs的用途是什么
  • ejs是嵌入在html中的javascript,因此您可以创建动态html

  • 所以不管你有什么逻辑,只要把它写在ejs模板中,让它处理一切。您只需要将信息传递给ejs引擎
  • 所以不是

    if (obj)
                {
                    return generatePartial1(data);
                }
                else
                {
                    return generatePartial2(data);
                }
    
    我建议捕获整个数据

    if (obj)
                {
                    array1.push(data);
                }
                else
                {
                    array2.push(data);
                }
    
  • 然后将这整组数据传递给ejs,在ejs文件中写入条件和所有逻辑,并让它处理html逻辑。 例如
  • res.render('template\u file.js'{
    阵列1:阵列1,
    array2:array2
    });