试图从req.body捕获数据,这给我带来了一个空对象?

时间:2019-06-22 14:29:25

标签: node.js rest api express

我尝试从Postman捕获数据,但是“ req.body”为我带来了一个空对象。这可能是什么问题?

我不太擅长Node.js和Express。

我在StackOverFlow上阅读了许多问题,但对我来说都无济于事,无论是会话还是其他任何事情。

我有一个文件应用程序:


/*********
* app.js file
*********/


const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

module.exports = function () {
  let server = express(),
    create,
    start;

  create = (config, db) => {
    // add middleware to parse the json
    server.use(bodyParser.json());
    server.use(bodyParser.urlencoded({
      extended: false
    }));

    let routes = require('../routes');
    // set all the server things
    server.set('env', config.env);
    server.set('port', config.port);
    server.set('hostname', config.hostname);


    //connect the database
    mongoose.connect(
      db.database,
      {
        useNewUrlParser: true,
        useCreateIndex: true
      }
    );

    // Set up routes
    routes.init(server);
  };


  start = () => {
    let hostname = server.get('hostname'),
      port = server.get('port');
    server.listen(port, function () {
      console.log('Express server listening on - http://' + hostname + ':' + port);
    });
  };
  return {
    create: create,
    start: start
  };
};


当我尝试捕获数据时,下面是空的(未定义)

我的user.js服务


/********
* user.js file (services/users)
********/


const express = require('express');
const User = require('../../models/user');

const getUsers = async (req, res, next) => {
  try {

    let users = await User.find({});

    if (users.length > 0) {
      return res.status(200).json({
        'message': 'users fetched successfully',
        'data': users
      });
    }

    return res.status(404).json({
      'code': 'BAD_REQUEST_ERROR',
      'description': 'No users found in the system'
    });
  } catch (error) {
    return res.status(500).json({
      'code': 'SERVER_ERROR',
      'description': 'something went wrong, Please try again'
    });
  }
}

const createUser = async (req, res, next) => {

  try {

    const {
      name,
      email
    } = req.body;

    if (name === undefined || name === '') {
      return res.status(422).json({
        'code': 'REQUIRED_FIELD_MISSING',
        'description': 'name is required',
        'field': 'name'
      });
    }

    if (email === undefined || email === '') {
      return res.status(422).json({
        'code': 'REQUIRED_FIELD_MISSING',
        'description': 'email is required',
        'field': 'email'
      });
    }


    let isEmailExists = await User.findOne({
      "email": email
    });

    if (isEmailExists) {
      return res.status(409).json({
        'code': 'ENTITY_ALREADY_EXISTS',
        'description': 'email already exists',
        'field': 'email'
      });
    }

    const temp = {
      name: name,
      email: email
    }

    let newUser = await User.create(temp);

    if (newUser) {
      return res.status(201).json({
        'message': 'user created successfully',
        'data': newUser
      });
    } else {
      throw new Error('something went worng');
    }
  } catch (error) {
    return res.status(500).json({
      'code': 'SERVER_ERROR',
      'description': 'something went wrong, Please try again'
    });
  }
}

module.exports = {
  getUsers: getUsers,
  getUserById: getUserById,
  createUser: createUser,
  updateUser: updateUser,
  deleteUser: deleteUser
}



我希望对代码有任何提示和建议

谢谢!

1 个答案:

答案 0 :(得分:0)

如果正文中未发送任何内容,则req.body字段将为空对象。对于任何GET请求,如果将数据发送到端点,则将通过参数(即[website].com?paramkey1=paramvalue1&paramkey2=paramvalue2)发送,并且正文始终为空对象。对于POSTPUT请求,您将在正文中发送数据,而req.body应包含该数据。

我假设您正在测试createUser函数。首先,我会尝试在req.body函数顶部使用控制台日志记录createUser,以防字段名不正确。此外,添加正文的Postman和添加Params的Postman部分看起来几乎相同,因此您可能也想尝试控制台日志记录req.query和/或确认您在Postman上的正确位置。

没有更多信息就很难知道。您知道正在设置路由,对吗?您在邮递员中得到了成功的回应吗?