req.body在node.js中空了,并表示为app

时间:2019-01-16 12:23:55

标签: node.js express ejs

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

该应用程序将使用ejs作为模板,而我正在使用express.json()来解析表单中的数据。自从express以来,就不使用body-parser了。

每当我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');
});

感谢您的任何答复!

3 个答案:

答案 0 :(得分:0)

您需要一个中间件来解析请求主体。我认为最常见的是body-parser。相当容易使用:

  • 通过以下方式安装:npm install body-parser
  • 导入:var bodyParser = require('body-parser')
  • 并注册为快速中间件:app.use(bodyParser.json({ type: 'application/*+json' }))

答案 1 :(得分:0)

好!这很尴尬。我刚刚重新启动服务器,它正在运行。我不知道为什么以前没有用。我认为这可能是因为我以为我在不使用时正在使用nodemon。好东西,我在我的第一篇文章中向我展示了我有多少菜鸟哈哈。

答案 2 :(得分:0)

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

您必须安装bodyParser npm 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",因此您必须在/users文件中包含路由users.js,因为{ {1}}应该与post('/register' ...相同。