gpt4 book ai didi

node.js - 从参数加载部分内容

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:53 25 4
gpt4 key购买 nike

我最近开始使用 Node.js 进行开发,到目前为止我已经掌握了基础知识(路由、身份验证、 View 等)。我现在想更好地组织我的模板,因此我想找到一种根据参数加载部分内容的方法。

在我的应用程序中,我有这个;

freeway.get('/login', function(req,res){
res.render('login');
});

我想要的是能够传递一个指向部分的参数并让我的 View 渲染它,就像这样;

freeway.get('/login', function(req,res){
res.render('index', {reqpage: "login"});
});

我的索引 View 包含我的主模板,该模板主要由硬编码的部分组成(尽管有些模板具有一些显示逻辑,例如用户登录时的用户特定元素)。我想进一步扩展它,并动态地将部分内容从我的应用程序传递到索引 View ,而不是拥有几个本质上重复的模板,内容仅略有不同。

我尝试了以下方法但没有成功;

1) <%= reqpage %>

2) <% include reqpage %>

3) <% include <%= reqpage %> %>

在任何情况下,它们要么导致应用程序引发错误(意味着未找到部分),要么将路径呈现为字符串。我什至尝试了以下方法,希望它将其解释为代码来渲染部分内容,但可惜没有这样的运气;

res.render('index', {reqpage: "<% include login %>"});

有什么想法吗?或者 Express + EJS 的设计根本就没有考虑到这一点?

最佳答案

感谢 mscdex ( https://github.com/visionmedia/ejs/issues/93 ) 提供的链接,解决方案很简单,尽管它确实需要您直接编辑 EJS lib 文件。

为了其他人试图找到解决方案,我将在这里解释一下。此代码对 EJS 1.0.0 版本有效。

1) 在node_modules\ejs\ejs.js第215行,需要添加以下内容;

if(options[name])
var path = resolveInclude(options[name], filename);
else

else 之后的行将读取为 var path =solveInclude(name, filename);

2) 在node_modules\ejs\lib\ejs.js第163行,添加与上面相同的代码。

3)在您的node.js应用程序路由中,然后添加一个指向您希望渲染的部分的变量;

res.render('index', {reqpage: "login"});

4)最后,在索引 View 中(按照本例),您应该添加一个标准包含;

<% include reqpage %>

考虑扩张

  1. 也许可以考虑在 EJS 中复制整个未修改的代码函数,并将其从 include 更改为 dynamic,以便您轻松识别 View 中哪些部分是静态的,哪些是静态的作为变量传入。

此更改就像在 EJS 库中将其从“包含”更改为“动态”一样简单。由于 EJS 检测“include”的方式,您无法在不重构代码的情况下使用“include_dyn”(或其中包含“include”的任何内容)。

关于node.js - 从参数加载部分内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24047254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com