При попытке записать данные из БД с помощью 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'
1
user8259536 27 Авг 2017 в 19:06

3 ответа

Лучший ответ

Используйте Article.findById(mongoose.Types.ObjectId(req.params.id)}, (err, article)...

Поскольку вы ищете идентификатор объекта, а не строку.

0
HatzavW 27 Авг 2017 в 18:26

Модели

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
0
Derya Cortuk 25 Ноя 2019 в 09:03

Я столкнулся с этим. Я решил это.

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)    

}    
}

< EM> Контроллеры / маршруты

Router.get ('/ user /: id', userController.getUser)

0
Derya Cortuk 25 Ноя 2019 в 08:59