有没有办法创build一个由服务器处理产生的dynamic部分?

我已经开始使用NodeJS几个月了,我遇到了部分渲染的一个小问题。 我想在一些模板中包含部分视图,但是我希望这个部分是从服务器dynamic生成的(因为它取决于从数据库和其他东西中获取的数据)。

我试图创build一个模板助手做到这一点,但由于处理需要asynchronous完成,我不能得到一个HTML返回写在我的模板。

基本上最适合我的是类似的东西(这段代码显然不起作用):

template_file.js

... <div> <%- generatePartial(data) %> </div> ... 

helper_middleware.js

 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(); }; 

现在我可能完全错了我想处理这个问题的方法,所以如果你有任何解决scheme/其他build议,不要犹豫。

PS:我使用ExpressJS和EJS。

我认为你的方向是完全错误的

  1. 什么是ejs?

ejs是JavaScriptembedded在HTML中,所以你可以创builddynamic的HTML。

  1. 所以无论你把它写在ejs模板里面,让它处理所有事情。 你只需要将信息传递给ejs引擎。

所以,而不是

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

我build议捕捉整个数据

 if (obj) { array1.push(data); } else { array2.push(data); } 
  1. 然后把这一大堆数据传给ejs,在ejs文件中写出条件和所有的逻辑,让它处理html逻辑。 例如。

res.render('template_file.js', { array1: array1, array2: array2 });