Не удается прочитать свойство 'имя пользователя' из неопределенного в Express с JWT - PullRequest
1 голос
/ 21 марта 2019

При реализации на основе 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}`));

регистрация работает хорошо, но когда я использую путь входа в систему только для проверки имени пользователя, я получаю эту ошибку.Я не уверен, почему это происходит

1 Ответ

1 голос
/ 21 марта 2019

Ваш код не имеет пакета body-parser - https://expressjs.com/en/4x/api.html#app.post.method. Если в файле node_modules / packages его нет, установите его с помощью npm install body-parser --save - https://www.npmjs.com/package/body-parser.

// ...code
const SECRET_KEY = "secretkey23456";
const bodyParser = require('body-parser');

const port = process.env.PORT || 3002;
// mongoose coonection
// body Parser Middleware
// app.use(express.json()); --> Incorrect
app.use(bodyParser.json()); 
// app.use(express.urlencoded({ extended: true })); --> Incorrect
app.use(bodyParser.urlencoded({ extended: true }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...