При реализации на основе JWT регистрация входа в систему Express js с Mongodb , когда я пытался сопоставить введенные пользователем данные с именем пользователя базы данных, я получил эту ошибку:
TypeError: Невозможно прочитать свойство 'username' из неопределенного
это мой код:
app.js
const express = require('express');
const path = require('path');
const app = express();
const jwt = require('jsonwebtoken');
const bcrypt = require('bcrypt');
const mongoose = require('mongoose');
const StudentModel = require('./studentmodel');
const SECRET_KEY = "secretkey23456";
const port = process.env.PORT || 3002;
//mongoose coonection
// body Parser Middleware
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.post('/register', (req, res) => {
const student = new StudentModel();
let salt = bcrypt.genSaltSync(10);
student.username = req.body.username;
student.name = req.body.name;
student.email = req.body.email;
student.password = bcrypt.hashSync(req.body.password, salt);
student.save((err, user) => {
if (err) return res.status(500).send('Server error!');
console.log(user);
const expiresIn = 24 * 60 * 60;
const accessToken = jwt.sign({ id: user.id }, SECRET_KEY,
{
expiresIn: expiresIn
});
res.status(200).send({ "user": user, "access_token":
accessToken, "expires_in": expiresIn
});
});
});
});
app.get('/', (req, res) => {
res.render('index');
});
app.post('/login', (req, res) => {
const username = req.body.username;
const password = req.body.password;
const student = StudentModel.findOne({ username});
if(!student) {
return res.json('not found');
}
const isValid = bcrypt.compareSync(password, student.password);
if (student && !isValid) {
return res.json(' found');
}
});
app.listen(port, () => console.log(`Server started on port ${port}`));
регистрация работает хорошо, но когда я использую путь входа в систему только для проверки имени пользователя, я получаю эту ошибку.Я не уверен, почему это происходит