为什么我只获取其中一件商品的内容?

时间:2014-08-30 20:36:14

标签: node.js express routes mongoose

我有一个简单的评论应用程序,使用户可以通过表单在系统中输入注释,然后将这些注释记录到页面底部的列表中。

我想对其进行修改,以便用户在创建评论后可以点击评论,并且会加载与评论相关的相关内容。

我的架构:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var CommentSchema = new Schema({
    title: String,
    content: String,
    created: Date
});

module.exports = mongoose.model('Comment', CommentSchema);

我的app.js路线:

app.use('/', routes);
app.use('/create', create);
app.use('/:title', show);

我的节目路线:

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Comment = mongoose.model('Comment', Comment);

router.get('/', function(req, res) {
    Comment.findOne(function(err, comment){
        console.log(comment.content)
    });
});

module.exports = router;

我的系统中有三条评论并保存在我的数据库中,每条评论都有独特的内容,但每当我点击评论时,无论它是什么。我只获得与第一条评论相关的内容。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

您必须提供condition for .findOne()来检索特定文档:

  

Model.findOne(条件,[字段],[选项],[回调]

如果没有一个,则暗示与集合中的每个文档匹配的空condition

Comment.findOne({}, function ...);

而且,.findOne()只是检索匹配的第一个。


:titleshowtitle属性的路由中包含Schema参数,一个可能的条件是:

Comment.findOne({ title: req.params.title }, function ...);

但是,如果title s不是唯一的,以便找到“ right ”,那么您将使condition更具体。 <{3}}或_id将是最明显的。

app.use('/:id', show);
Comment.findOne({ id: req.params.id }, function ...);

// or
Comment.findById(req.params.id, function ...);

同时调整任何链接和res.redirect()以填充id :id