Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在layout.ejs应用程序中将动态内容集成到Sails.JS文件的正确方法是什么?

在layout.ejs应用程序中将动态内容集成到Sails.JS文件的正确方法是什么?
EN

Stack Overflow用户
提问于 2013-11-28 05:31:49
回答 2查看 2.5K关注 0票数 10

假设我用Sails.js写了一个博客应用程序。

在这个应用程序的每个页面上,都有一个名为“最近的帖子”的侧边栏小部件,它列出了5个最近发布的帖子的标题,然后点击它们就可以看到这个帖子。

因为每个页面上都有这个侧栏小部件,所以它应该在layout.ejs中。但是,这里我们有一个冲突-动态内容只应该从控制器操作中的数据库中提取,用于呈现特定的视图。

这个动态内容不是针对特定视图的,而是针对整个站点的(通过layout.ejs)。

根据我所理解的约定,我必须获取中的侧栏小部件的动态内容数据--每个呈现视图的控制器操作(否则,当我试图在文件中调用该控件时,会得到一个未定义的错误)。

我试过/考虑过的事情:

  • 中加载该动态内容--每个呈现视图的控制器操作(此解决方案非常糟糕),并在layout.ejs中调用该动态内容,就好像它是特定视图的本地内容一样。这很好,但违背了D.R.Y.的原则,坦率地说,在每个控制器操作中都必须对数据库运行相同的查询,这是很痛苦的。
  • 根据另一个类似的堆栈溢出问题,创建一个新的配置(E.G. config/globals.js),将我的动态内容从数据库中作为变量加载到配置文件中,然后在我的layout.ejs文件中调用sails.config.globals.[variable_name]。这也起了作用,因为显然配置变量在应用程序中随处可见--但这是一个我不喜欢的讨厌的解决方案(我正在加载的内容只是最近5个帖子的标题和片段,而不是解决方案所暗示的“全局配置选项”)。
  • 运行查询,直接在一些.EJS标记之间获取<% %>文件中的动态内容。我不确定这是否有效,但即使这样,它也违背了关注点的分离MVC原则,如果可能的话,我想避免这样做(如果它甚至有效的话)。
  • 根据一个冗长的IRC讨论@ http://webchat.freenode.net/?channels=sailsjs,有人建议创建一个策略并将该策略映射到我的所有控制器。在该策略中,查询数据库中最近的5个帖子,并将它们设置为req.recentposts。这个解决方案的问题是,虽然最近的posts数据将传递给每个控制器,但我仍然必须将该req.recentposts数据传递给我的视图--因此我仍然必须在每个操作中修改每个res.view({})。我不需要在每个操作中都有数据库查询,这是很好的,但我仍然需要在每个呈现视图的操作中添加一行代码.我不是D.R.Y,我在找更好的解决方案。

所以, -所以,

EN

回答 2

Stack Overflow用户

发布于 2013-12-04 11:43:32

在文件夹/config中,您应该创建一个文件express.js并添加如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports.express = {
    customMiddleware: function(app){
        app.use(function(req, res, next){
            // or whatever query you need
            Posts.find().limit(5).exec(function(err, posts){
                res.locals.recentPosts = posts;
                // remember about next()
                next();
            });
        });
    }
}

然后在您的视图中做一些简单的循环:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<% for(var i=0; i<recentPosts.length; i++) { %>
    <% recentPosts[i].title %>
<% } %>

以下是一些指向文档中适当位置的链接:https://github.com/balderdashy/sails-docs/blob/0.9/reference/Configuration.md#expresshttps://github.com/balderdashy/sails-docs/blob/0.9/reference/Response.md#reslocals

票数 5
EN

Stack Overflow用户

发布于 2014-12-19 16:58:18

我找到了另一种方法。我所做的就是创建一个服务,通过简单地利用已经在sails中的ejs库,将.ejs文件呈现为普通的html。该服务可以由控制器调用,甚至可以作为局部变量中的函数传递,并在.ejs中执行。名为TopNavBarService的服务如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var ejs = require('ejs');
exports.render = function() {
    /* database finds goes here */
    var userInfo = {
        'username' : 'Kallehopp',
        'real_name' : 'Kalle Hoppson'
    };
    var html = null;
    ejs.renderFile('./views/topNavBar.ejs', {'locals':userInfo}, function(err, result) { html = result; });
    return html;
}

在斗牛犬中,它看起来可能是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports = {
    testAction: function (req, res) {
        return res.view('testView', {
            renderNavbar: TopNavBarService.render // service function as a local!
        });
    }
};

通过这种方式,您可以创建定制的ejs-助手,它甚至可以接受参数(尽管这里没有显示)。当调用时,助手可以访问数据库并呈现html的一部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div>
    <%- renderNavbar() %>
</div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20267550

复制
相关文章
如何在Linux中将文本内容追加到文件末尾?
在Linux中处理配置文件时,有时您需要将诸如配置参数之类的文本附加到现有文件中。追加只是意味着将文本添加到文件的末尾。
用户6543014
2020/03/06
14.6K0
如何在Linux中将文本内容追加到文件末尾?
php编程实现追加内容到txt文件中的方法
本文实例讲述了php编程实现追加内容到txt文件中的方法。分享给大家供大家参考,具体如下: 覆盖txt文件内容:
用户2323866
2021/07/01
2K0
Java中将Iterable转成Stream的正确姿势
Iterable接口本省并没提供转换到stream方法。我们可以用StreamSupport.stream() 来实现。
明明如月学长
2021/08/31
1.1K0
Java中将Iterable转成Stream的正确姿势
合并所有文件内容到指定文件
申请软著或知识产权用的。主要统计代码行数和合并所有代码文件到一个文件,打印前后各30页这个需要自己打开合并后的文件去打印。
jwj
2022/05/18
9950
在Linux中将php-fpm配置成服务的方法
php-fpm.pid 目录必须指向:/usr/local/php/var/run/php-fpm.pid
魏杰
2022/12/23
4420
在PHP中将图片转换为base64编码的方法
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。
魏杰
2022/12/23
1.3K0
nodejs中追加内容到文件
最近在使用nodejs写日志记录的时候,发现一个问题:使用fs模块读写文件,调用writeFile(path,data)或者writeFileSync(path,data)时会将日志文件原来的内容给覆盖掉,显然这不是我所想要的结果,我想要的效果是在文件末尾追加,所以需要使用appendFile(path,data)或者appendFileSync(path,data)方法。以下内容转载自nodejs中追加内容到文件
ccf19881030
2020/10/16
4.8K0
nodejs中追加内容到文件
云原生应用程序:原因、内容及方法
本文阐释了构建云原生应用程序的重要性、优点及其实现方式。
Techeek
2018/01/10
1K0
云原生应用程序:原因、内容及方法
2021 年最值得使用的 Node.js 框架
Node.js 是最敏捷的服务端 web 应用平台,因为它为应用开发公司提供了构建可扩展的单一编程语言 web 平台的便利。它是最热门的开源的 JavaScript 运行时框架之一,具有跨平台属性,让我们可以在浏览器以外的环境运行代码。
用户1250838
2021/05/31
6.5K0
2021 年最值得使用的 Node.js 框架
将Core ML模型集成到您的应用程序中
此示例应用程序使用经过训练的MarsHabitatPricer.mlmodel模型来预测火星上的栖息地价格。
iOSDevLog
2018/07/25
1.4K0
将文本文件的内容存储在DataSet中的方法总结
本文介绍了一种将文本文件的内容存储在DataSet中的方法,包括读取文件、处理数据、创建表、填充数据和解析记录等步骤。该方法包括读取文件、处理数据、创建表、填充数据和解析记录等步骤。
彭泽0902
2018/01/04
3.4K0
Spring Cloud Sleuth在Spring Boot应用程序中的集成
Spring Cloud Sleuth是一款用于构建分布式跟踪系统的Spring Cloud组件。它可以帮助我们追踪请求从开始到结束的整个流程,并收集所需的信息以进行监视和调试。本文将介绍如何在Spring Boot应用程序中集成Spring Cloud Sleuth。
堕落飞鸟
2023/04/11
2.5K0
Halcon HDEVELOP 工程导出集成到 C++ 应用程序
Halcon 的 Hdevelop 可以快速编写算子开发图像处理算法,本文记录将 Hdevelop 代码导出到 C++ 应用程序的方法。 背景 正确安装 Halcon 我的版本是 20.11 下载链接:https://www.mvtec.com/cn/downloads/halcon 本文内容自官方教学视频整理扩展而来 正确安装、配置例程代码、系统变量 Halcon 导出到 C++ 在 Halcon 中调试和开发图像处理算法更加便利快捷 开发完成的项目可以以工程或代码形式导出,导出后可以直接供
为为为什么
2022/11/07
2.6K0
Halcon HDEVELOP 工程导出集成到 C++ 应用程序
将文件内容复制到另外文件
在示例类Demo.FileDemo中,ProcessFile()方法接受输入文件和输出文件,并调用SetUpInputFile()和SetUpOutputFile()打开文件,一个用于读取,另一个用于写入。然后,它逐行读取输入文件,并调用ProcessLine()对每行的内容执行一个或多个替换,将每行的新内容写入输出文件。
用户7741497
2022/07/06
9950
安全地写内容到文件
「写入内容将被写入到一个临时文件,如果没有错误发生,则commit()会将其移至最终文件」。这样可以确保在写入过程中发生错误的情况下,最终文件中的数据不会丢失,并且最终位置中不会存在任何部分写入的文件。建议将整个文档保存到磁盘时,请始终使用QSaveFile。
Qt君
2020/03/19
1.2K0
echo 输出多行内容到文件
发表于2020-04-122020-04-12 作者 wind echo ' 回车 + 粘贴 [mysqld] skip-host-cache skip-name-resolve datadir = /var/lib/mysql !includedir /etc/mysql/conf.d/ lower_case_table_names=1 server-id=3 log-bin=mysql-bin sync_binlog=1 binlog_checksum=none binlog_format=m
前Thoughtworks-杨焱
2021/12/07
3.2K0
matinal:python 动态导入文件的方法
在实际项目中,我们可能需要在执行代码的过程中动态导入包并执行包中的相应内容,通常情况下,我们可能会将所需导入的包及对象以字符串的形式传入,例如test.test.run,下面将介绍如何动态导入。 假设存在如下包:
matinal
2023/10/14
2010
matinal:python 动态导入文件的方法
python中动态导入文件的方法
在实际项目中,我们可能需要在执行代码的过程中动态导入包并执行包中的相应内容,通常情况下,我们可能会将所需导入的包及对象以字符串的形式传入,例如test.test.run,下面将介绍如何动态导入。
Python学习者
2023/04/06
1.9K0
点击加载更多

相似问题

无法在layout.ejs (sails.js)中添加脚本

11

在spring集成中将XML转换为Java对象的正确方法是什么?

19

为UIView动态创建内容的正确方法是什么?

14

在Rails应用程序中集成ReactJS的正确方法是什么?

13

sails.js的layout.ejs中没有从cdn加载jquery

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文