Ошибка типа: не удается прочитать свойство ’email’ неопределенного в nodejs

#javascript #node.js #mongoose #mongoose-schema

#javascript #node.js #мангуст #мангуст-схема

Вопрос:

Я пытаюсь создать api с использованием nodejs. Здесь я создаю маршруты регистрации для api, но проблема в том, что каждый раз, когда я пытаюсь зарегистрировать пользователя, он говорит об этом. Вот вся ошибка, которую я получаю.

Ошибка типа: не удается прочитать свойство ’email’ неопределенного значения

 TypeError: Cannot read property 'email' of undefined
    at C:/projects/blog-mern/backend/src/routes/users.js:7:13
    at Layer.handle [as handle_request] (C:projectsblog-mernbackendnode_modu
lesexpresslibrouterlayer.js:95:5)
    at next (C:projectsblog-mernbackendnode_modulesexpresslibrouterroute
.js:137:13)
    at Route.dispatch (C:projectsblog-mernbackendnode_modulesexpresslibro
uterroute.js:112:3)
    at Layer.handle [as handle_request] (C:projectsblog-mernbackendnode_modu
lesexpresslibrouterlayer.js:95:5)
    at C:projectsblog-mernbackendnode_modulesexpresslibrouterindex.js:28
1:22
    at Function.process_params (C:projectsblog-mernbackendnode_modulesexpre
sslibrouterindex.js:335:12)
    at next (C:projectsblog-mernbackendnode_modulesexpresslibrouterindex
.js:275:10)
    at Function.handle (C:projectsblog-mernbackendnode_modulesexpresslibr
outerindex.js:174:3)
    at router (C:projectsblog-mernbackendnode_modulesexpresslibrouterind
ex.js:47:12)
    at Layer.handle [as handle_request] (C:projectsblog-mernbackendnode_modu
lesexpresslibrouterlayer.js:95:5)
    at trim_prefix (C:projectsblog-mernbackendnode_modulesexpresslibroute
rindex.js:317:13)
    at C:projectsblog-mernbackendnode_modulesexpresslibrouterindex.js:28
4:7
    at Function.process_params (C:projectsblog-mernbackendnode_modulesexpre
sslibrouterindex.js:335:12)
    at next (C:projectsblog-mernbackendnode_modulesexpresslibrouterindex
.js:275:10)
    at C:projectsblog-mernbackendnode_modulesbody-parserlibread.js:130:5
 

Это мой код

models/users.js

 import mongoose from 'mongoose';
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';

const schema = new mongoose.Schema({
    email: {
        type: String,
        required: true
    },
    passwordHash: {
        type: String,
        required: true
    }
}, {
    timestamps: true
});

schema.methods.setPassword = function setPassword(password) {
    this.passwordHash = bcrypt.hashSync(password, 10)
}

schema.methods.generateJWT = function generateJWT() {
    return jwt.sign({
        email: this.email,
    }, 'secret')
}

schema.methods.toAuthJSON = function toAuthJSON() {
    return {
        email: this.email,
        token: this.generateJWT()
    }
}

export default mongoose.model('User', schema);
 

routes/users.js

 import express from 'express';
import User from '../models/User';

const router = express.Router();

router.post('/', (req, res, next) => {
    const { email, password } = req.body.users;
    const user = new User({ email });
    user.setPassword(password);
    user.save().then(userRecord => {
        res.json({user: userRecord.toAuthJSON()})
    }).catch(err => {
        res.status(500).json({
            error: err
        })
    })
})

export default router;
 

я отправляю запрос с помощью postman
parmas подробно

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

1. Какая строка кода выдает ошибку? Вы отладили значения?

2. вы смонтировали body-parser ?

3. req.body.users не определено, как вы отправляете с клиента? каков ваш req.body.users

4. Можете ли вы добавить свои параметры / детали запроса postman к вопросу? @naga-elixir-jar верен.

5. также заголовки, не так ли application/json

Ответ №1:

Проблема с вашим кодом в том, что вы пытаетесь прочитать users ключ, req.body которого не существует. Ваш исходный объект req не содержит users .

Если вы console.log(req.body) , то req.body будет выглядеть точно так же, как ваш запрос:

 {
  email: "adityakmr088@gmail.com"
  passwordHash: "12345"
}
 

Измените свой код на:

 const { email, passwordHash } = req.body;
const user = new User({ email });
 

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

1. теперь это говорит Error: data and salt arguments required

2. @adityakumar отредактируйте свой вопрос, чтобы включить трассировку стека (которую вы добавили ранее). Не удаляйте это, это важная часть вопроса