500内部服务器错误:无法读取未定义的属性“用户名”

时间:2019-05-21 15:28:08

标签: javascript node.js json express properties

我试图用express在mongodb数据库中注册用户,但是当我对POST进行呼叫时

localhost:3000/users/register

随身:

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

邮递员给出:此正文为500 Internal Server Error:

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 :(得分:0)

希望您已添加正文分析器::  Express附带正文解析器  在初始化路由之前,请应用这些中间件。

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

答案 1 :(得分:0)

错误消息告诉您userParam未定义。因此,很显然req.body无法正确解析。

由于您提到过Express应用程序中已经具有主体解析器中间件,因此您还应确保在进行路由之前将app.use(bodyParse())放在其中。