[英]Req.Body is returning “undefined” values
I have added body-parser
to my application app.js
file. 我已将body-parser
添加到我的应用程序app.js
文件中。 I have a routes
folder and a controllers
folder which handles my request. 我有一个routes
文件夹和一个处理我的请求的controllers
文件夹。
Initially, I did not have body-parser
added to my application. 最初,我没有在我的应用程序中添加body-parser
。 When I added body-parser
and console logged req.body
I got an empty object. 当我添加了body-parser
和控制台记录的req.body
我得到了一个空对象。 When I console logged req.body.email
, req.body.password
, and req.body.displayName
values from postman
were read as undefined. 当我安慰登录req.body.email
, req.body.password
和req.body.displayName
从值postman
被理解为未定义。
app.js app.js
let createError = require('http-errors');
let express = require('express');
let path = require('path');
let cookieParser = require('cookie-parser');
let logger = require('morgan');
let bodyParser = require('body-parser');
let assert = require('assert');
if (process.env.NODE_ENV !== 'production') {
require('dotenv').config()
}
let usersRouter = require('./routes/user');
let app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use('/user', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
// MongoDB Connection
const db = {};
const MongoClient = require('mongodb').MongoClient;
MongoClient.connect(process.env.MONGODB_CONNECT_URL, (err, client) => {
// Connection works dont worry about it
});
module.exports = app;
routes/user.js 路线/ user.js的
const express = require('express');
const router = express.Router();
const user = require('../controllers/user');
router.post('/', user.createUser);
router.delete('/:id', user.deleteUser);
router.get('/:id', user.loginUser);
module.exports = router;
controllers/user.js 控制器/ user.js的
const bcrypt = require('bcryptjs');
const Joi = require('joi');
const ObjectId = require('mongodb').ObjectID;
exports.createUser = async (req, res, next) => {
console.log('Request body: ', req.body);
const email = req.body.email;
const password = req.body.password;
const displayName = req.body.displayName;
console.log('Email: ', email);
console.log('Password: ', password);
console.log('Display name: ', displayName);
};
Please make sure that you are adding content-type header in postman content-type : application/json
also in body tab select raw and beside raw select json from drop-down list. 请确保您在邮递员content-type : application/json
类型中添加内容类型标题content-type : application/json
也在body选项卡中选择raw并从下拉列表中选择raw select json旁边。 Check this 检查一下
https://i.stack.imgur.com/ZDhcl.png https://i.stack.imgur.com/ZDhcl.png
You are probably trying to send form-data with Postman which sends a multipar body, body parser cannot handle multipart bodies. 您可能正在尝试使用Postman发送表单数据,该表单发送一个多重体,体解析器无法处理多部分体。 For handling multipart bodies you have to use a different module, I normally use multer . 为了处理多部分体,你必须使用不同的模块,我通常使用multer 。
With multer installed you just have to include it and it as middleware (under you body-parser for instance) using none() since in this case you want to handle text-only multipart body (More information about this in multer docs 安装multer后,你只需要使用none()作为中间件(在你的body-parser下),因为在这种情况下你想要处理纯文本的多部分体(在multer docs中有关于此的更多信息)
let multer = require('multer');
app.use(multer().none());
Besides that I wanted to mention you are including two body parsers in your code, the express body parser 除此之外,我想提一下你在代码中包含了两个正文解析器,即快速体解析器
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
and an external body-parser 和一个外部身体解析器
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
Pick one, you don't need both, the best option for me would be to keep the one that comes with express, this way you don't have to install any more external packages. 选择一个,你不需要两个,对我来说最好的选择是保留快递附带的那个,这样你就不必再安装任何外部包了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.