MongooseError [CastError]: сбой приведения к ObjectId для значения «undefined» в пути «_id» для модели «User» - PullRequest
0 голосов
/ 18 апреля 2020

Я работаю над проектом с vue, express, mongodb и axe ios, чтобы иметь возможность CRUD для пользовательской страницы. В настоящее время я настроил, где, когда вы нажимаете на ячейку, он обновляет базу данных. Тем не менее, я продолжаю получать эту ошибку в консоли, когда пытаюсь сохранить свои изменения: «MongooseError [CastError]: сбой приведения к ObjectId для значения« undefined »в пути» _id »для модели« Пользователь »« В моей системе не регистрируются данные Кроме того, консоль из моего "console.log (_id)", печатается только {} undefined. Я еще не нашел ничего, что помогло бы мне. Любая помощь будет принята с благодарностью. Вот мое приложение. Vue

<template>
    <div id="nav">
      <router-link to="/">Home |</router-link>
      <router-link to="/edituser"> Add/Edit/Delete User</router-link>
      <router-view></router-view>
      <h3>List of Users</h3>
      <table id="table">
        <tr>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Email</th>
          <th>Password</th>
        </tr>
        </table>
    <div v-for="user in users" :key="user" class="userlist">
        <p :to="{query:{user: firstname}}" contenteditable>
            {{user.firstname}} 
        </p>
        <p :to="{query:{user: lastname}}" contenteditable>
            {{user.lastname}} 
        </p>
        <p :to="{query:{user: email}}" contenteditable>
            {{user.email}} 
        </p>
        <p :to="{query:{user: password}}" contenteditable>
            {{user.password}}
        </p>
    </div>
    <br>
    <button v-on:click="saveEdit">Save Changes</button>
    </div>
</template>

<script>
import UserService from "./UserService"
export default {
  name: "Navigation",
  data(){
    return{
    users: [],
    user: Object,
    userId: '',
    err: ''
    }
  },
  methods:{
    saveEdit(){
            try{
                this.user = UserService.updateUsers(this.user)
            } catch (err){
                this.error = err.message;
            }
    }
  },
     async created(){
      try{
        this.users = await UserService.getUsers();
      } catch(err){
        this.error = err.message;
      }
    }
}
</script>

Вот мое Usersservice. js

    import axios from "axios";
    const mongoURL = "http://localhost:5000/api/posts";

        static updateUsers(user){
            const url = `${mongoURL}/update/${user._id}`
            console.log(url)

            return axios.put(url, {
                user,
            })
        }


    export default UserService;

Here is my Users.js model
const mongoose = require('mongoose');

const User = mongoose.model("User",{
    firstname: {
        type: String,
        required: true,
        trim: true
    },
    lastname: {
        type: String,
        required: true,
        trim: true
    },
    email: {
        type: String,
        required: true,
        trim: true
    },
    password: {
        type: String,
        required: true,
        trim: true
    }
})

module.exports = User;

Вот мои сообщения. js

const express = require("express"),
      mongoose = require("mongoose"),
      User = require("../models/Users.js"),
      router = express.Router();

      router.put("/update/:id", async (req,res) =>{
          console.log(req.body);
          const user = new User(req.body["user"]);
          const _id = req.params.id;
          console.log(_id);
          console.log(req.body["user"]);
          const updateProperies = Object.keys(user);

          try{
              const editUser = await User.findByIdAndUpdate(_id,user,{
              });
              if (!editUser){
                  return res.status(404).send();
              }
              console.log(editUser);
              res.send(editUser);
          } catch (error) {
              console.log(error);
              res.status(400).send(error);
          }
      })

1 Ответ

0 голосов
/ 18 апреля 2020

Я подозреваю, что ошибка происходит из раздела try. Посмотрите на код ниже

              const editUser = await User.findByIdAndUpdate(_id,user,{

Если вы предполагаете использовать только _id, в этом случае пользователь является избыточным. Что происходит, когда вы удаляете его (, пользователь,)

...