#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;
Комментарии:
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 отредактируйте свой вопрос, чтобы включить трассировку стека (которую вы добавили ранее). Не удаляйте это, это важная часть вопроса