可以从 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文件。
但是,就像我说的,我认为第二种方法毫无意义,因为它与模板几乎完全相同,只是步骤更多。
希望这对您有所帮助!祝你课程顺利!
我是一名学生,正在使用 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文件。
但是,就像我说的,我认为第二种方法毫无意义,因为它与模板几乎完全相同,只是步骤更多。
希望这对您有所帮助!祝你课程顺利!