我试图用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));
}
答案 0 :(得分:0)
希望您已添加正文分析器:: Express附带正文解析器 在初始化路由之前,请应用这些中间件。
const app = require("express")();
app.use(urlencoded({ extended: false}));
app.use(json());
答案 1 :(得分:0)
错误消息告诉您userParam
未定义。因此,很显然req.body
无法正确解析。
由于您提到过Express应用程序中已经具有主体解析器中间件,因此您还应确保在进行路由之前将app.use(bodyParse())
放在其中。