【问题标题】:Nodejs form submit using express returns undefined value使用 express 提交的 Nodejs 表单返回未定义的值
【发布时间】:2020-08-17 18:50:47
【问题描述】:

基本上,这个简单的表单提交不会返回任何内容。使用邮递员,我只能获取 request.body 数据,或者输入名称为 undefined (console.log) / {}。在表单提交上什么都没有发生。我已经阅读了所有 body-parser 解决方案,但据我所知,这现在由 express 4 处理。

这是我的表单(home.ejs):

<form action="/" method="POST">
<div class="form-group">
  <label for="name">Name:</label>
  <input type="text" name="name" class="form-control" id="name">
</div>
<button type="button" type="submit" class="btn btn-primary submit">Submit</button>
</form>

这是我的服务器代码:

//Load packages
const express = require('express');
const app = express();

app.use(express.urlencoded({ extended: true}));
app.use(express.json()); 
app.use(express.static('public'));
app.set("view engine", "ejs");

//SERVER
// Listen to the App Engine-specified port, or 8080 otherwise
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}...`);
})

//render home page
app.get('/', function(req,res){
    res.render("home");
});


//post request
app.post('/', function(req, res)
{var body = res.json(req.body)
 var name = body.name; 
    console.log(name);
});

【问题讨论】:

  • type="button" type="submit" - 也许你应该删除 type="button" ?你试过了吗?

标签: node.js express


【解决方案1】:

您可以使用express.urlencodedbodyParser.urlencoded 两者都相同link 你需要在这里改变的是有两种按钮类型所以只添加一个

<button type="submit" class="btn btn-primary submit">Submit</button>

并用此代码替换

//post request
app.post('/', function(req, res){
  var name = req.body.name
    res.json(name);
    //res.send(name);
    console.log(name)
});

【讨论】:

  • 请确保在Postman 中转到body -> x-www-form-urlencoded 并在那里添加key-values
  • 非常感谢!这成功了!真的很感激。
【解决方案2】:

在你的 CLI 中运行“npm i body-parser”并像导入 body-parser 一样

const bodyParser = require('body-parser')

然后使用中间件

app.use(bodyParser.urlencoded({ extended: true }));

你也应该更新发布请求处理程序

//post request
app.post('/', function(req, res)
    {var name = req.body.name; 
    console.log(name);
    res.status(201).send();
});

【讨论】:

  • 这会导致请求挂起,因为响应永远不会发送...
  • 谢谢!这有效(省略了 Bodyparser,因为它是 Express 4 的本机);不知道为什么我错过了那个。
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2021-01-28
  • 2021-10-14
  • 2018-10-08
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
相关资源
最近更新 更多