Javascript mongoose findByID返回未定义
当尝试使用Javascript mongoose findByID返回未定义,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,当尝试使用findById记录数据库中的数据时,我得到一个返回值undefined // Get single article app.get('/article/:id', (req, res) => { Article.findById(req.params.id, (err, article) => { console.log(article); return; }); }); //Article Schema let articleSchema =
findById
记录数据库中的数据时,我得到一个返回值undefined
// Get single article
app.get('/article/:id', (req, res) => {
Article.findById(req.params.id, (err, article) => {
console.log(article);
return;
});
});
//Article Schema
let articleSchema = mongoose.Schema({
title: { type: String, required: true },
author: { type: String, required: true},
body: { type: String, required: true}
});
let Article = module.exports = mongoose.model('Article', articleSchema)
我查了一些东西,然后让它工作了,但我不确定这是不是正确的方法
所以我发现,如果我使用findOne()
并传入Article.id
我会得到我想要的结果,但这是正确的做法吗
我觉得article.id
应该通过req.params.id
传递,但是当我将它传递到findOne()
时,我会收到一个错误,说:
Error: Invalid argument to findOne(): 'article_id'
使用Article.findById(mongoose.Types.ObjectId(req.params.id)},(err,Article).
因为您正在查找对象id而不是字符串。我遇到了它。我解决了这个问题
const UserModel = require('../models/userModel')
exports.getUser = async(req, res) => {
const _id = req.params.id
try {
const user = await UserModel.findById(_id)
if (!user) {
return res.status(404).send()
}
res.status(201).send(user)
} catch (error)
{
res.status(500).send(error)
}
}
管制员/路线
router.get('/user/:id',userController.getUser)型号
const mongoose = require('mongoose')
const validator = require('validator')
const User = mongoose.model('User', {
name: {
type: String,
required: true,
trim: true
},
email: {
type: String,
required: true,
trim: true,
lowercase: true,
validate(value) {
if (!validator.isEmail(value)) {
throw new Error('Email is invalid')
}
}
},
password: {
type: String,
required: true,
minlength: 7,
trim: true,
validate(value) {
if (value.toLowerCase().includes('password')) {
throw new Error('Password cannot contain "password"')
}
}
},age: {
type: Number,
default: 0,
validate(value) {
if (value < 0) {
throw new Error('Age must be a postive number')
}
}
}
})
module.exports = User
const mongoose=require('mongoose'))
const validator=require('validator')
const User=mongoose.model('User'{
姓名:{
类型:字符串,
要求:正确,
修剪:对
},
电邮:{
类型:字符串,
要求:正确,
特里姆:没错,
小写:true,
验证(值){
如果(!validator.isEmail(值)){
抛出新错误('电子邮件无效')
}
}
},
密码:{
类型:字符串,
要求:正确,
最小长度:7,
特里姆:没错,
验证(值){
if(value.toLowerCase().includes('password')){
抛出新错误('密码不能包含“Password”')
}
}
},年龄:{
类型:数字,
默认值:0,
验证(值){
如果(值<0){
抛出新错误('年龄必须是正数')
}
}
}
})
module.exports=用户
您是否在发送给/article/:ID的链接上从数据库中提取了正确的ID。我遇到了相同的问题,正如我之前在基本数组索引上学到的,并转移到了MongoDB。我只需要更新一个字符,以包含“\u ID”而不是“ID”的MongoDB语法的下划线
适用于我的HTML呈现页面的正确代码如下所示:
<a href={`/article/${article._id}`}>
<a href={`/article/${article.id}`}>
我从以下内容开始并给出了一个未定义的结果:
<a href={`/article/${article._id}`}>
<a href={`/article/${article.id}`}>
尝试注销err
参数这是我得到的:CastError:Cast to ObjectId在路径“\u id”处的值“article\u id”失败,在模型“article”中当前遇到的错误是,当我尝试记录一个article值时,我得到一个未定义的值,错误为:消息:“Cast to ObjectId在路径“\u id”处的值“article\u id”失败“对于模型“Article”
我确实遇到了一个错误命名参数的问题,但是已经解决了,我可以使用articles.find()让它显示文章
但是,当尝试使用Article.findById时,出现了一些问题。这是在索引html中犯的错误。我在传递参数时出错,并将其作为字符串传递,这就是它无法读取id的原因。我在检查索引文件时发现了这个问题。接下来,我这样做了,并得到了以下结果:错误:传入的参数必须是一个12字节的字符串或一个24个十六进制字符的字符串
,所以我去检查了数据库,因为我怀疑可能没有为id存储值,这就是为什么它不会显示它的原因,但当我检查id时,它就在那里,所以我又回到了原点,可能是req.params.i吗d
不存在?我可以记录req.params.id
并返回正确的值OK my bad我发现我加载了错误的参数,这就是它找不到id的原因,我给了它article\u id
的参数,它应该是article.\u id
以便我可以使用article.find
获得值,但当我找不到时ried使用Article.findById
我又得到了一个未定义的值O.O“当回答一篇旧帖子时,如果你能为你的答案提供一些上下文而不仅仅是代码,这将是很有帮助的,因为这可能会使它对其他人更有用。