我正在尝试构建一个接收POST请求以创建用户的API,但是我的所有req.body
请求都收到未定义的错误。我的应用程序设置如下(为简便起见,已简化):
在我的用户路由文件中被Express Router调用的用户控制器
/controllers/user.js
userController.addUser = function(req, res) {
let user = new User();
user.username = req.body.username;
user.first_name = req.body.first_name;
user.last_name = req.body.last_name;
user.email = req.body.email;
user.type = req.body.user_type
// This returns undefined as does all other req.body keys
console.log("REQ.BODY.EMAIL IS: " + req.body.email);
}
用户路由文件:
/routes/user.js-需要上面的用户控制器
router.post('/user/create', userController.addUser);
主应用: 除了使用req.body。*之外,所有路由和控制器均按我的测试工作
index.js-主应用程序文件
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use('/api', routes);
我仔细阅读了Express文档和无数StackOverflow帖子,但运气不佳。让我知道您是否需要进一步说明。
答案 0 :(得分:-1)
我的问题是我如何将正文发送到API端点。我使用的是表单数据,而不是Postman的x-www-form-urlencoded。用户错误
答案 1 :(得分:-1)
有时body-parser
版中的更改似乎不起作用,在这种情况下,只需使用以下命令,这将从body-parser
中删除依赖项:
router.post('/user/create', (req, res, next) => {
let body = [];
req.on('error', (err) => {
console.error(err);
}).on('data', (chunk) => {
// Data is present in chunks without body-parser
body.push(chunk);
}).on('end', () => {
// Finally concat complete body and will get your input
body = Buffer.concat(body).toString();
console.log(body);
// Set body in req so next function can use
// body-parser is also doing something similar
req.body = body;
next();
});
}, userController.addUser);