gpt4 book ai didi

javascript - Mongoose:无法通过 ID 检索文档 - 错误 404

转载 作者:行者123 更新时间:2023-12-03 02:10:12 26 4
gpt4 key购买 nike

我尝试使用 mongoose 从 MongoDB 检索对象,但收到错误 404。

router.get('/blogs/:id', function(req, res){
console.log('getting one blog post by id');
Blog.findOne({
_id: req.params.id
})
.exec(function (err, blog) {
if(err){
res.send('error occured');
} else{
console.log(blog);
res.render('entry', {entries: entry});
}
})
});

错误消息:** 5abe5efa06ac64917363277a 无法加载资源:服务器响应状态为 404(未找到)。**

文档存在于数据库中:

{
"_id" : ObjectId("5abe5efa06ac64917363277a"),
"title" : "this is the first blog",
"author" : "me",
"body" : "this is a post",
"comments" : [
ObjectId("5ac1fe92f2eb490c3c5b1357")
]
}

这是我的entry.ejs View :

<% include header %>
<div class="panel panel-default">

<div class="panel-heading">

<div class="text-muted pull-right">
<%= entry.published %>
</div>
<%= entry.author %> <a class="btn btn-default" href="blogs/<%= entry._id %>"> <%= entry.title %></a>
</div>
<div class="panel-body">
<%= entry.body %>
<div id="comments">

<% entry.comments.forEach(function(comment){ %>
<%= comment.commentAuthor + " : " + comment.comm %>
<% }) %>
</div>
<div>

</div>
</div>

<div class="panel-body">

<a class="btn btn-default" href="<%= entry._id %>/new-comment">Add new comment</a>

</div>
</div>

这是我定义模式的方式:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var exports = module.exports = {};

exports.commentSchema = new Schema({
commentAuthor: String,
comm: String,
date: { type: Date, default: Date.now }
});

exports.blogSchema = new Schema({
title: String,
author: String,
body: String,
comments: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'commentSchema' }],
date: { type: Date, default: Date.now },

});
exports.Blog = mongoose.model('Blog',exports.blogSchema);

使用以下代码我可以检索所有博客:

var express = require('express');
var router = express.Router();
var schema = require('../model/schema');

/* GET users listing. */
router.get('/', function(req, res, next) {
schema.Blog.find({}, function (err, blogs) {
if (err) {
console.log(err);

} else{
res.render('blogs', {entries: blogs});
}

});
});


module.exports = router;

最佳答案

由于您将字符串发送到查询,并且它需要一个ObjectId,因此您会收到错误。

尝试下面,

解决方案 1:

    import mongoose from 'mongoose';
(or)
var mongoose = require('mongoose');

router.get('/blogs/:id', function(req, res){
console.log('getting one blog post by id');
Blog.findOne({
_id: mongoose.Types.ObjectId(req.params.id)
})
.exec(function (err, blog) {
if(err){
res.send('error occured');
} else{
console.log(blog);
res.render('entry', {entries: entry});
}
})
});

解决方案 2:

var ObjectId = require('mongoose').Types.ObjectId; 

router.get('/blogs/:id', function(req, res){
console.log('getting one blog post by id');
Blog.findOne({
_id: new ObjectId(req.params.id)
})
.exec(function (err, blog) {
if(err){
res.send('error occured');
} else{
console.log(blog);
res.render('entry', {entries: entry});
}
})
});

关于javascript - Mongoose:无法通过 ID 检索文档 - 错误 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49611548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com