【问题标题】:Can data be loaded from MongoDB to auto generate webpages with EJS?可以从 MongoDB 加载数据以使用 EJS 自动生成网页吗?
【发布时间】:2021-03-27 14:13:40
【问题描述】:

我是一名正在使用 MongoDB、Node、EJS 等制作应用程序的学生。学习 EJS 和 partials 让我想到了一个问题。是否可以简单地为页面创建 EJS 模板,并最终让全栈应用程序扫描 MongoDB 数据库中的条目,然后为数据库中的每个条目动态生成网页?

这样,您大概可以拥有一个数据库,如果您向其中添加条目,则会为您添加到其中的数据字段自动生成一个网页。

如果这是一个模糊的问题或没有多大意义,我很抱歉,但这是我想到并好奇的事情。

谢谢, 朱莉

【问题讨论】:

    标签: node.js database mongodb ejs auto-generate


    【解决方案1】:

    所以,有两个答案:一个是“是的,很容易”,另一个是“是的,但会更难”,这取决于你的意思。

    如果您只是说对于每条 Mongo 记录,您可以转到 /puppies/[mongo-id] 之类的页面,是的,这是完全可能的。以下是你的做法,以“小狗”应用为例:

    • 为终点/puppies/:id 设置路线。 /:id 是一个路由参数,它将捕获 /puppies/1/puppies/2 等内容并将它们附加到 req.params 上的请求对象。
    • 在那条路线上,使用req.params.id 搜索Mongo 以查找特定的小狗记录。 Puppy.findById(req.params.id) 或类似的(自从我使用 mongo 和 mongoose 以来一直很热,但它会是这样的)
    • 为小狗页面制作一个 EJS 模板,您可以在其中插入信息。我假设您已经看过类似的语法:res.render('path/to/template', { name: 'Spot', breed: 'Border Collie', goodness: 'extreme' }) -- 将数据传递到模板中。您可以制作模板,使您拥有的关于每只小狗的信息都相同,因此无论您将哪只小狗放入页面,它看起来都一样并且是有效的 HTML。
    • 将您从请求 ID 为 req.params.id 的小狗中获得的信息传递到模板中。

    瞧!现在,当您创建小狗时,您可以立即转到 puppies/my-new-puppys-id 并在那里查看您的小狗。

    第二个答案!如果你的意思是你想为每只小狗创建一个 HTML 页面——我个人认为当你可以使用上述模板来做这件事时,这太过分了?但是,是的,你可以。

    EJS 视图引擎接受一个模板和一些值,然后输出一个字符串。当我们使用res.render 时,是的,我们正在获取该字符串并将其发送到浏览器。但是,您也可以使用ejs.render(参见EJS docs——它的工作原理与res.render 的模板路径和数据对象几乎相同,只是不发送响应。)获取字符串而不发送它作为回应。然后,您可以使用 fs(文件系统)模块获取该字符串并使用它创建一个新的 html 文件。

    所以:

    • POST 请求到/puppies
    • 路由处理程序在 mongo 数据库中创建新的小狗
    • 使用新的小狗,使用ejs.render 生成 HTML 字符串
    • 使用 fs 模块创建新的小狗 HTML 文件。

    但是,就像我说的,我认为第二种方法非常没有意义,因为它与模板几乎完全相同,只是步骤更多。

    希望这会有所帮助!祝你的课程好运!

    【讨论】:

    • 非常感谢您的回答。它确实帮助加深了我对这个主题的了解,并激发了一些谷歌搜索,帮助我弄清楚如何实现我正在做的事情。非常感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 2023-01-31
    相关资源
    最近更新 更多