使用express和mongodb提供动态URL服务

5
我是一个有用的助手,可以为您翻译文本。

我正在构建一个具有类似reddit功能的网站。我希望用户提交的内容可以获得自己的页面。每个提交都被分配一个5个字符的ID,我希望这个ID出现在该页面的URL中。

我在路由文件中有这个函数,它呈现了一个名为titles的页面:

exports.titles = function(req, res){
i = 0
read(function(post){
    url = post[i].URL;
    res.render('titles', {title: post[i].title, url: post[i].URL});
});

};

这个语句在 app.js 中被执行:

app.get('/titles', home.titles); //home.js is the router file

标题页面上有一个链接,文本为post.title,URL为post.URL。当用户点击链接时(例如domain.com/12345),他们应该被带到一个名为content的页面,其中包含内容post.body。
如何才能a)将URL传回我的app.js文件以包含在app.get中,b)在此路由器文件中包含app.get函数,或c)以任何其他方式解决此问题?
编辑:我确实有一个名为“titles”的对象,它是一个mongodb集合,但它在另一个模块中。没有理由不能将其添加到路由器中。
编辑:我尝试将以下内容添加到app.js中,以查看它是否起作用:
app.get('/:id', function(req, res){
  return titles.findOne({ id: req.params.id }, function (err, post) {
    if (err) throw(err); 

    return res.render('content', {title: post.title, content: post.body});
   });
});

编辑:我已经解决了。我所做的只是将标题格式化,使其看起来像domain.com/titles/12345,并将app.get('/:id'更改为app.get('/titles/:id',...


“content” 是什么?那是你的其中一个视图吗? - Sandip Subedi
1个回答

19

如果我理解正确,我会反过来做。

简短版本

  1. 从URL中获取 id
  2. 然后从数据库中获取与此 id 相关联的数据
  3. 使用这些数据构建最终页面。

您不需要为每个URL创建新路由。一个URL可以包含一些变量(这里是id),Express可以解析URL以获取此变量。然后,从这个id获取构建正确页面所需的数据。

详细版本

假设有人在输入以下URL:http://domain.com/1234
我还假设您有一个名为titles的MongoDB集合。

您可以定义如下的路由:

app.get('/:id', function(req, res) {
  // Then you can use the value of the id with req.params.id
  // So you use it to get the data from your database:
  return titles.findOne({ id: req.params.id }, function (err, post) {
    if (err) { throw(err); }

    return res.render('titles', {title: post.title, url: post.URL /*, other data you need... */});
  });
});

编辑

我根据最新的评论进行了一些更改...


一个模型只是一个“对象”,它帮助你从数据库中提取/推送数据。这是一个抽象层,它确实可以帮助你。也许你可以添加一些代码来说明如何从数据库中获取数据? - maxdec
我在另一个模块中有这个函数:exports.read = function(callback){ titles.find().toArray(function(err, result){ if (err) throw err; callback(result); }); };它将检索到的对象传递给路由文件中的此函数:read = function(callback){ postdb.read(function(post){ callback(post); }); };现在,我已经设置好按条目编号解析数组,但我将更改为使用ID。 - user1816679
我找到了这个网站:http://www.yiiframework.com/doc/blog/1.1/en/post.model这是你所说的吗? - user1816679
我编辑了答案。也许它会更接近你想要的。但如果你能编辑你的问题并添加更多的代码和文件架构... =) - maxdec
忘掉模型吧,现在它并不重要。你的 titles 变量应该能胜任这个工作。(我的意思是像 这样 - maxdec
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接