У меня несколько проектов, и я не могу отображать каждое из свойств на каждой странице проекта по его идентификатору. (Используя Nodejs, Reactjs, MongoDB ...) выдает ошибку

Ошибка преобразования в ObjectId для значения ": id" в пути "_id" для модели "project"

И этот console.log:

console.log('-----------PROJECTS byId-----------', projects);

Дает мне undefined

Мои маршруты:

const express = require('express'),
Projects = require('../models/projects.js'),
app = express.Router();
exports.render_projects_byId = (req, res) => {
let id = req.params.id;

Projects.findById(id).exec((err, projects) => {
    if (err) {
        console.log(err);
    }
    console.log('-----------PROJECTS byId-----------', projects);
    res.json(projects)
  });
};

Моя страница проекта, на которой будут отображаться свойства проекта под собственным идентификатором

import React, { Component } from 'react';
import { NavLink } from 'react-router-dom';

import './Project.css';



class Project extends Component {
    state = {
     title : '',
     typeOfProduction: ''
    };

componentDidMount() {

    fetch('/dashboard/projects/:id')
    .then(response => { return response.json()
        .then(projects => {
            console.log(projects);
            this.setState({
                title: this.state.title,
                typeOfProduction: this.state.typeOfProduction
            })      
        })
    }).catch(error => console.error('Error:', error));
}

render() {
 console.log("This.state.projects " + this.state.projects);

    return (

        <div>
            <section className="Project container">
                  <h1>
                  {this.state.title} oi
                  </h1>
                  <h1>
                  {this.state.typeOfProduction} oi
                  </h1>
            </section>
        </div>
    );

    }
}

export default Project;

Схема моделей моего проекта:

var mongoose = require("mongoose");

var projectSchema = new mongoose.Schema({

   title: String,
   typeOfProduction: String
})

module.exports = mongoose.model("Projects", projectSchema);
1
AnaF 25 Сен 2018 в 00:59

2 ответа

Лучший ответ

Нашел мою проблему

Я неправильно обращался к объекту и его идентификатору при выборке.

    console.log("PROPS " + JSON.stringify(this.props));

РЕКВИЗИТ

{ " Матч " : { " путь " : " / проект / : идентификатор " , " URL " : " / проект / 5ba945d25589902362b54469 " , " isExact ": правда, " Титулы ": { "ID " : " 5ba945d25589902362b54469 " } } , " место " : { " путь " : " / проект / 5ba945d25589902362b54469 " , " поиск " : " " , " хэш " : " " } , " История " : { "длина " : 50 , " действие " : " PUSH " , " место " : { " путь " : " / проект / 5ba945d25589902362b54469 " , " поиск " : " " , " хэш " : " " } } }

Затем мне нужно было получить доступ к таким параметрам объекта:

 const { match: { params } } = this.props;

Тогда я знал, что обращаюсь к проекту маршрута: id неправильный путь

//before

выборки ( /dashboard/project/:id )

//after

выборки ( /dashboard/project/${params.id} )


class Project extends Component {
constructor(props){
    super(props);
    this.state = {
      project: {}
    };
}


componentDidMount() { 

console.log("PROPS " + JSON.stringify(this.props));

    const { match: { params } } = this.props;


    fetch(`/dashboard/project/${params.id}`)
    .then(response => {  return response.json()
    }).then(project => {
        this.setState({
            project: project
        })
    })
}

render() {

    return (

        <div>
            <section className="Project container">
                  <h1>
                  {this.state.project.title} oi
                  </h1>
                  <h1>
                  {this.state.project.typeOfProduction} oi
                  </h1>
            </section>
        </div>
    );

 }
}

export default Project;
0
AnaF 24 Сен 2018 в 23:46

"CastError: Cast to ObjectId failed for value "{ id: ':id' }" at path "_id" for model "project"

Вы отправляете объект, но он ожидает строку. Вам стоит попробовать Projects.findById(id) ....

0
user7988458user7988458 24 Сен 2018 в 22:06