首页 > 解决方案 > req.body 在 node.js 和 express 应用程序中返回为空

问题描述

我正在用 express 学习 node.js。我很新,这是我第一个完全没有教程的项目。

该应用程序将使用 ejs 作为模板,我正在使用 express.json() 来解析表单中的数据。不使用 body-parser,因为 express 现在是开箱即用的。

每当我 console.log(req.body) 它作为一个空字符串出现。当我尝试 console.log(req.body.name) 或任何其他表单字段时,它返回为未定义。

请帮忙,我不知道问题出在哪里,这对我以前的任何练习应用程序都不是问题。

这是我的相关代码:

在 app.js 中

// Require routes
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
//
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('/', indexRouter);
app.use('/users', usersRouter);

以我的形式(register.ejs):

<form action="/users/register" method="POST">
    <div class="formGroup">
        <label for="name">Name</label>
        <input type="text" name="name" placeholder="Full name">
    </div>
    <div class="formGroup">
        <label for="username">Username</label>
        <input type="text" name="username" placeholder="Enter any username">
    </div>
    <div class="formGroup">
        <label for="email">Email</label>
        <input type="email" name="email" placeholder="Enter your email">
    </div>
    <div class="formGroup">
        <label for="password">Password</label>
        <input type="password" name="password">
    </div>
    <div class="formGroup">
        <label for="password2">Confirm password</label>
        <input type="password" name="password2">
    </div>
    <div class="formGroup">
        <label for="about">About</label>
        <textarea name="about" placeholder="Say a little bit about yourself..."></textarea>
    </div>
    <div class="formGroup">
        <input type="submit" name="submit" value="Submit">
    </div>
</form>

在我的路由文件(users.js)中

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

  console.log(req.body);

  const newUser = {
    name: req.body.name,
    username: req.body.username,
    email: req.body.email,
    password: req.body.password,
    about: req.body.about
  }
  console.log(newUser);
  res.redirect('/users');
});

感谢您的任何回复!

标签: node.jsexpressejs

解决方案


欢迎来到前面,我看到了你的代码,可能有一些你需要注意的错误。

你必须安装 bodyParsernpm install body-parser --save

`// Require routes
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
//
app.use(logger('dev'));
app.use(express.json());

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// 
app.use('/', indexRouter);
app.use('/users', usersRouter);`

并以(在register.ejs文件中)的形式action="/users/register"使用,因此您必须/usersusers.js文件中包含该路线,因为该路线post('/register' ...应与action="/users/register".


推荐阅读