我有一个简单的评论应用程序,使用户可以通过表单在系统中输入注释,然后将这些注释记录到页面底部的列表中。
我想对其进行修改,以便用户在创建评论后可以点击评论,并且会加载与评论相关的相关内容。
我的架构:
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;
我的系统中有三条评论并保存在我的数据库中,每条评论都有独特的内容,但每当我点击评论时,无论它是什么。我只获得与第一条评论相关的内容。
为什么会这样?
答案 0 :(得分:0)
您必须提供condition
for .findOne()
来检索特定文档:
Model.findOne(条件,[字段],[选项],[回调] )
如果没有一个,则暗示与集合中的每个文档匹配的空condition
:
Comment.findOne({}, function ...);
而且,.findOne()
只是检索匹配的第一个。
:title
中show
和title
属性的路由中包含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
。