我尝试从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
}
我希望对代码有任何提示和建议
谢谢!
答案 0 :(得分:0)
如果正文中未发送任何内容,则req.body
字段将为空对象。对于任何GET
请求,如果将数据发送到端点,则将通过参数(即[website].com?paramkey1=paramvalue1¶mkey2=paramvalue2
)发送,并且正文始终为空对象。对于POST
和PUT
请求,您将在正文中发送数据,而req.body
应包含该数据。
我假设您正在测试createUser函数。首先,我会尝试在req.body
函数顶部使用控制台日志记录createUser
,以防字段名不正确。此外,添加正文的Postman和添加Params的Postman部分看起来几乎相同,因此您可能也想尝试控制台日志记录req.query
和/或确认您在Postman上的正确位置。>
没有更多信息就很难知道。您知道正在设置路由,对吗?您在邮递员中得到了成功的回应吗?