Данные не хранятся в базе данных MongoDB — node.js

#node.js #mongodb #express #visual-studio-code

Вопрос:

Я пишу node.js код и попробуйте вставить данные в базу данных mongodb почтальоном (почтой), но данные не сохраняются ,в документы вставляются только _id и _v, которые вводятся автоматически. Я думаю, что проблема в синтаксическом анализаторе тела, он устарел, но я попробовал несколько вариантов, и он остался устаревшим. (Я не уверен, что проблема с bodyparser).Данные были вставлены через Почтальона(почта). Это относится к node.js код:

 const express = require ('express');
const mongoose = require ('mongoose');
const router = require ('./routes/api');
const bodyParser = require("body-parser");
const dotenv = require('dotenv');
dotenv.config();
const app = express();
.
.
.
app.use(bodyParser.json());//this bodyParser is deprecated
app.use('/',router);
 

Модель:

 const mongoose = require ('mongoose');
const userSchema = mongoose.Schema({
    name:{
        type:String, 
        require
    },
    password:{
        type:String,
        minlength:8,
        require
    }
})
module.exports = mongoose.model('User', userSchema);
 

контроллер:

 const User = require ('../models/User');
const newUser = async (req,res)=>{
    let user1 = new User(
        req.body);
        console.log(`${user1} added`);
        try{
            await user1.save();
            res.status(200).json({newUser:user1});
        }
        catch(error){
            res.send(`cant save new user: ${error.message}`)
        }        
}
module.exports = { newUser }
 

Вот что я написал в «Почтальоне»:

 {
    "name":"james",
    "password":"12345678"
}
 

и это ответ:

 {
    "newUser": {
        "_id": "60a68f815019f31cfc098572",
        "__v": 0
    }
}
 

Я был бы очень рад получить помощь !!

Комментарии:

1. Не могли бы вы, пожалуйста, добавить свой код бд? Также я не думаю, что это имеет какое-либо отношение к bodyParser. Поскольку он устарел, вы можете использовать app.use(express.json()) его вместо этого.

2. это схема «пользователя»:const мангуст = требуется («мангуст»); const UserSchema = мангуст. Схема({ имя:{ тип:Строка, требуется }, пароль:{ тип:строка, минимальная длина:8, требуется } }) модуль.экспорт = мангуст.модель(«Пользователь», схема пользователя);

3. Пожалуйста, добавьте эти коды модели и контроллера в сам вопрос.

4. Да, я понимаю, но вы должны показать нам полный код прямо там, где вы сохраняете запись в базе данных. И вы не добавили код контроллера в вопрос после удаления из комментариев?

5. теперь это работает!!! спасибо, спасибо!!!!

Ответ №1:

Пожалуйста, внесите следующие изменения, чтобы получить желаемый результат.

 // In place of app.use(bodyParser.json()), use
app.use(express.json())
 
 // Controller
const userSchema = require("../models/User");
const newUser = async (req, res) => {
  let user1 = new userSchema({
    name: req.body.name,
    password: req.body.password,
  });
  console.log(`${user1} added`);
  try {
    await user1.save().then(() => res.status(201).json({ newUser: user1 }));
  } catch (error) {
    res.send(`cant save new user: ${error.message}`);
  }
};
module.exports = { newUser };
 

Кроме того, внутри схемы пользователя, пожалуйста, измените require на required: true .

 // Model
const userSchema = new mongoose.Schema({
    name:{
        type: String, 
        required: true
    },
    password:{
        type: String,
        minLength:8,
        required: true
    }
})
 

Ответ №2:

Измените свой model.js файл. Он проверит, не пропало ли чего-нибудь в req.body

 const mongoose = require ('mongoose');
const userSchema = mongoose.Schema({
    name:{
        type:String, 
        required: true
    },
    password:{
        type:String,
        minlength:8,
        required: true
    }
})
module.exports = mongoose.model('User', userSchema);