Node.js 带数据的POST上req.body为空,但日志req显示req.body存在 我的问题

Node.js 带数据的POST上req.body为空,但日志req显示req.body存在 我的问题,node.js,express,post,Node.js,Express,Post,我正在尝试使用express.js在node.js中编写一个注册/登录页面。我决定将路由和应用程序初始化分为两个文件。当我使用数据{“用户名”:“xyz”,“密码”:“xyz”}向localhost:3000/register发送POST请求时,请求对象具有属性body。然而,当我试图访问这个属性时,我得到了未定义的属性 我当前的代码 我的预期结果 我希望能够访问req.body和req.body.username 您的代码中有一个小问题。router.post回调函数的第一个参数是req,第二

我正在尝试使用express.js在node.js中编写一个注册/登录页面。我决定将路由和应用程序初始化分为两个文件。当我使用数据
{“用户名”:“xyz”,“密码”:“xyz”}
localhost:3000/register
发送POST请求时,请求对象具有属性body。然而,当我试图访问这个属性时,我得到了未定义的属性

我当前的代码 我的预期结果
我希望能够访问
req.body
req.body.username

您的代码中有一个小问题。
router.post
回调函数的第一个参数是
req
,第二个参数是
res
回调函数
参数是固定的非命名参数

您正在尝试获取
响应对象
上的主体,尽管参数名为
req
,但它仍然保存
响应对象
。这是问题的根源

请换一下

错误:

router.post('/', async (res, req) => {
router.post('/', async (req, res) => {
正确:

router.post('/', async (res, req) => {
router.post('/', async (req, res) => {

我看到您正在控制器/寄存器中导入bodyParser,但没有设置它,至少在这个代码段中是这样。如果您没有任何特殊原因将其放入控制器,请改为这样做

// app.js
// Load express and define port
const express = require('express');
const bodyParser = require('body-parser'); // new code

const app = express();
app.use(bodyParser.urlencoded({ extended: true })); // new code
const port = 3000;
// App Configurations
app.use(express.json())
// Load Routes
var registerRouter = require('./controllers/register.js');
// Use Routes
app.use('/register', registerRouter);
// Start App
app.listen(port, () => console.log(`Example app listening on port ${port}!`));