有没有办法创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。
我认为你的方向是完全错误的
- 什么是ejs?
ejs是JavaScriptembedded在HTML中,所以你可以创builddynamic的HTML。
- 所以无论你把它写在ejs模板里面,让它处理所有事情。 你只需要将信息传递给ejs引擎。
所以,而不是
if (obj) { return generatePartial1(data); } else { return generatePartial2(data); }
我build议捕捉整个数据
if (obj) { array1.push(data); } else { array2.push(data); }
- 然后把这一大堆数据传给ejs,在ejs文件中写出条件和所有的逻辑,让它处理html逻辑。 例如。
res.render('template_file.js', { array1: array1, array2: array2 });
- 使用Express的Nodejs – 将mongoDB和mongoose添加到package.json并运行npm install时出错
- “访问资源权限不足”:使用Mongoose + Express的ACL中间件
- Node.js / Angular.jspipe理员授权的路线
- Angularjs从express.js的“public”文件夹的“views”文件夹中路由ejs静态文件
- Node.js – 使用主/明细页面在Express中redirect
- 与把手模板引擎的Sails.js
- Express.js:是否有可能像res.render一样将对象传递给redirect?
- Express.js使用路由器与App.use路由的好处?
- javascript(node.js)将url哈希转换为带有参数的url