TypeError: Cannot read property 'email' of undefined in nodejs
TypeError: Cannot read property 'email' of undefined in nodejs
我正在尝试 api 使用 nodejs。在这里,我正在为 api 创建注册路线,但问题是每次我尝试注册用户时,它都会这样说。
这是我遇到的全部错误。
TypeError: Cannot read property 'email' of undefined
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:\projects\blog-mern\backend\node_modu
les\express\lib\router\layer.js:95:5)
at next (C:\projects\blog-mern\backend\node_modules\express\lib\router\route
.js:137:13)
at Route.dispatch (C:\projects\blog-mern\backend\node_modules\express\lib\ro
uter\route.js:112:3)
at Layer.handle [as handle_request] (C:\projects\blog-mern\backend\node_modu
les\express\lib\router\layer.js:95:5)
at C:\projects\blog-mern\backend\node_modules\express\lib\router\index.js:28
1:22
at Function.process_params (C:\projects\blog-mern\backend\node_modules\expre
ss\lib\router\index.js:335:12)
at next (C:\projects\blog-mern\backend\node_modules\express\lib\router\index
.js:275:10)
at Function.handle (C:\projects\blog-mern\backend\node_modules\express\lib\r
outer\index.js:174:3)
at router (C:\projects\blog-mern\backend\node_modules\express\lib\router\ind
ex.js:47:12)
at Layer.handle [as handle_request] (C:\projects\blog-mern\backend\node_modu
les\express\lib\router\layer.js:95:5)
at trim_prefix (C:\projects\blog-mern\backend\node_modules\express\lib\route
r\index.js:317:13)
at C:\projects\blog-mern\backend\node_modules\express\lib\router\index.js:28
4:7
at Function.process_params (C:\projects\blog-mern\backend\node_modules\expre
ss\lib\router\index.js:335:12)
at next (C:\projects\blog-mern\backend\node_modules\express\lib\router\index
.js:275:10)
at C:\projects\blog-mern\backend\node_modules\body-parser\lib\read.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;
i am sending request using postman
您的代码存在问题,您正在尝试从 req.body
中读取 users
键,但该键不存在。您的原始请求对象不包含 users
.
如果您 console.log(req.body)
,req.body
将与您的要求完全相同:
{
email: "adityakmr088@gmail.com"
passwordHash: "12345"
}
将您的代码更改为:
const { email, passwordHash } = req.body;
const user = new User({ email });
我正在尝试 api 使用 nodejs。在这里,我正在为 api 创建注册路线,但问题是每次我尝试注册用户时,它都会这样说。 这是我遇到的全部错误。
TypeError: Cannot read property 'email' of undefined
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:\projects\blog-mern\backend\node_modu
les\express\lib\router\layer.js:95:5)
at next (C:\projects\blog-mern\backend\node_modules\express\lib\router\route
.js:137:13)
at Route.dispatch (C:\projects\blog-mern\backend\node_modules\express\lib\ro
uter\route.js:112:3)
at Layer.handle [as handle_request] (C:\projects\blog-mern\backend\node_modu
les\express\lib\router\layer.js:95:5)
at C:\projects\blog-mern\backend\node_modules\express\lib\router\index.js:28
1:22
at Function.process_params (C:\projects\blog-mern\backend\node_modules\expre
ss\lib\router\index.js:335:12)
at next (C:\projects\blog-mern\backend\node_modules\express\lib\router\index
.js:275:10)
at Function.handle (C:\projects\blog-mern\backend\node_modules\express\lib\r
outer\index.js:174:3)
at router (C:\projects\blog-mern\backend\node_modules\express\lib\router\ind
ex.js:47:12)
at Layer.handle [as handle_request] (C:\projects\blog-mern\backend\node_modu
les\express\lib\router\layer.js:95:5)
at trim_prefix (C:\projects\blog-mern\backend\node_modules\express\lib\route
r\index.js:317:13)
at C:\projects\blog-mern\backend\node_modules\express\lib\router\index.js:28
4:7
at Function.process_params (C:\projects\blog-mern\backend\node_modules\expre
ss\lib\router\index.js:335:12)
at next (C:\projects\blog-mern\backend\node_modules\express\lib\router\index
.js:275:10)
at C:\projects\blog-mern\backend\node_modules\body-parser\lib\read.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;
i am sending request using postman
您的代码存在问题,您正在尝试从 req.body
中读取 users
键,但该键不存在。您的原始请求对象不包含 users
.
如果您 console.log(req.body)
,req.body
将与您的要求完全相同:
{
email: "adityakmr088@gmail.com"
passwordHash: "12345"
}
将您的代码更改为:
const { email, passwordHash } = req.body;
const user = new User({ email });