500 Внутренняя ошибка сервера: невозможно прочитать свойство 'имя пользователя' из неопределенного - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь зарегистрировать пользователя в базе данных mongodb с помощью Express, но когда я делаю POST вызов

localhost:3000/users/register

с корпусом:

{
    "firstName": "Jason",
    "lastName": "Watmore",
    "username": "jason",
    "email": "jason@jason.com",
    "password": "my-super-secret-password"
}

Почтальон дает: 500 Внутренняя ошибка сервера с этим телом:

TypeError: Cannot read property 'username' of undefined
    at Object.create (E:\Drive\Desarollo de Aplicaciones Web\Proyecto Final\apiREST\users\user.service.js:42:50)
    at register (E:\Drive\Desarollo de Aplicaciones Web\Proyecto Final\apiREST\users\users.controller.js:23:17)

Это метод, на который указывает ошибка

async function create(userParam) {
    // validate

    if (await User.findOne({ username: userParam.username })) {
        throw 'Username "' + userParam.username + '" is already taken';
    }

Что происходит и как я могу это исправить?

Контроллер находится в точке, где он вызывает метод, который завершается ошибкой:

const express = require('express');
const router = express.Router();
const userService = require('./user.service');

// routes
router.post('/authenticate', authenticate);
router.post('/register', register);
router.get('/', getAll);
router.get('/current', getCurrent);
router.get('/:id', getById);
router.put('/:id', update);
router.delete('/:id', _delete);

module.exports = router;

function authenticate(req, res, next) {
    userService.authenticate(req.body)
        .then(user => user ? res.json(user) : res.status(400).json({ message: 'Username or password is incorrect' }))
        .catch(err => next(err));
}

function register(req, res, next) {
    userService.create(req.body)
        .then(() => res.json({}))
        .catch(err => next(err));
}


Ответы [ 2 ]

0 голосов
/ 21 мая 2019

В сообщении об ошибке говорится, что userParam не определено. Итак, ясно, что req.body не может быть правильно проанализирован.

Поскольку вы упомянули, что у вас уже есть промежуточное ПО body-parser в экспресс-приложении, вы также должны убедиться, что app.use(bodyParse()) находится перед тем, как вы выполнили маршрутизацию.

0 голосов
/ 21 мая 2019

Надеюсь, вы добавили парсер тела :: Экспресс поставляется с парсером тела Примените эти промежуточные программы перед инициализацией своего маршрута.

const app = require("express")();
app.use(urlencoded({ extended: false}));
app.use(json());
...