Description

Bonjour,

Me voici confronter à une erreur que je ne comprend absolument pas, j'ai cherché partout sur Internet je ne comprend rien.

Je vous explique : j'ai crée un server node.js avec express, mon but est d'envoyer un user dans ma base mongoDB via POSTMAN.

Voici mon code

Mon server.js :

const express = require('express');
const server = express();
const routes = require('./routes')
const mongoose = require('mongoose')
const bodyParser = require('body-parser')

mongoose.Promise = global.Promise;
server.use(bodyParser.json());
server.set('json spaces', 2) // permet de faire un affichage du JSON plus propre.
routes(server)

server.listen(3050,()=>{
    console.log("Ecoute sur le port 3050");

    mongoose.connect('mongodb://localhost/create_user_test',{
        useNewUrlParser : true,   
    });
        mongoose.connection
        .once('open',() => console.log('connexion a mongo établie'))
        .on('error',(error) => {
            console.warn('Warning',error);
    });
}) 

L'index.js de mes routes :

UserController = require("../controllers/user-controller")

module.exports = (server) =>{

    // USER
    server.get('/users', UserController.readAll)
    server.get('/user/:id', UserController.read)
    server.post('/user', UserController.create)
    server.delete('/user', UserController.delete)

}

Mon user-controllers.js :

const User = require("../models/user")

module.exports = {

    readAll(req,res){
        User.find().then((users)=>{
            res.send(users)
        })
    },

    read(req,res){
        const {id} = req.params;

        User.findById(id).then((user)=>{
            res.send(user)
        })
    },

    create(req,res){

        const name = req.body;
        const age = req.body;
        const poste = req.body;
        const salaire = req.body;

        const user = new User({name});

        user.save().then(()=>{
            res.send({result : "Un user ajouté : " + user}) 
        })
    },

    delete(req,res){
        const {id} = req.params;

        User.findByIdAndRemove(id).then((user)=>{
            res.send(user)
        })
    }
}

Et mon UserModel :

const mongoose = require('mongoose')
const Schema = mongoose.Schema

const UserSchema = new Schema({
    name : String
    // age : {type : Number, default : 0},
    // fonction : {type : String, default : null},
    // salaire : {type : Number, default : 1200}
})

const User = mongoose.model('user',UserSchema)

module.exports = User;

Ce que je rentre dans POSTMAN

En POST sur localhost://user, j'envoie en JSON : { "name" : "Romain" }

Et voici l'erreur que mon server m'affiche :

(node:7728) UnhandledPromiseRejectionWarning: ValidationError: user validation failed: name: Cast to String failed for value "{}" at path "name"

Voilà je pense avoir faire le tour, si quelqu'un peut m'aider sur ce coup là, je lui en serais éternelement reconnaissant :)

Merci bonne journée ou bonne soirée ! :)

3 réponses


Salut,
A la place de :

const user = new User({name});

Essaye :

const user = new User({name: "name"});

EDIT: Je n'avais pas vu que le post datait de 6 mois... Tu as dû trouvé depuis ;)

try this

User
    .create({
        firstName: firstName,
        lastName: lastName,
        username: userName, // the property is "username" in model
        password: password
    }, function (err, user) {
        if (err) {
            console.log("Error creating User: ", err);
            res
                .status(400)
                .json(err)
        } else {
            console.log("User Created: ", user);
            res
            .status(201)
            .json(user)
        }
    })
};

je suppose que c'est peut-être un problème de serveur interne. mybkexperience mcdvoice