可以从 MongoDB 加载数据以使用 EJS 自动生成网页吗?

Can data be loaded from MongoDB to auto generate webpages with EJS?

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

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

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

谢谢, 朱莉

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

如果你只是说对于每条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文件。

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

希望这对您有所帮助!祝你课程顺利!