我已将body-parser
添加到我的应用程序app.js
文件中。我有一个routes
文件夹和一个处理我的请求的controllers
文件夹。
最初,我没有将body-parser
添加到我的应用程序中。当我添加body-parser
并在控制台登录req.body
时,我得到了一个空对象。当我用控制台登录时,来自req.body.email
的{{1}},req.body.password
和req.body.displayName
值被读为未定义。
app.js
postman
routes / user.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;
controllers / 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;
答案 0 :(得分:2)
请确保您要在邮递员content-type : application/json
中添加内容类型标头,同时在“正文”标签中选择“原始”,然后在“原始”旁边从下拉列表中选择json。
选中
答案 1 :(得分:1)
您可能正在尝试使用Postman发送表单数据,而Postman发送了multipar正文,body解析器无法处理多部分正文。要处理多部分实体,您必须使用其他模块,我通常使用multer。
安装了multer后,您只需要使用none()将其包含在中间件中(例如,在您的body-parser下),因为在这种情况下,您要处理纯文本的多部分主体({{ 3}}
let multer = require('multer');
app.use(multer().none());
除了我想提起您的代码之外,您的代码中还包括两个主体解析器,即主体解析器
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
和外部人体分析器
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
选择一个,不需要两个,对我来说最好的选择是保留Express附带的一个,这样就不必安装其他外部软件包。