【问题标题】:Express POST request values not received未收到 Express POST 请求值
【发布时间】:2021-12-25 19:41:35
【问题描述】:

我正在尝试使用 Express 制作一个简单的注册页面,但是当我尝试从 HTML 表单访问输入值时,我得到了undefined

app.js:

var express = require('express');
var path = require('path');
var app = express();
const handlebars = require('express-handlebars');

const { json } = require('express');
var port = process.env.PORT || 5000;


var bodyParser = require('body-parser')
app.use( bodyParser.json() );       
app.use(bodyParser.urlencoded({
  extended: true
})); 

app.use(express.json());
app.use(express.urlencoded({ extended: false }));


app.use(express.static(path.join(__dirname, '/public')))
app.set('views', path.join(__dirname, "views"));
app.set('view engine', 'hbs');


app.get('/', (req,res)=>{
    res.render('index');
})
app.get('/register', (req,res)=>{
    res.render('register');
})

app.post('/register',(req,res)=>{
    const name = req.body.name;
    console.log(req.body.name);
    res.render('index');
})

app.listen(port, ()=>{
    console.log(`Server is running at port ${port}`);
})

register.hbs:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="/stylesheets/style.css">
    <title>Registration Website</title>
</head>
<body>
    <h1>Welcome to our Registration page</h1>
    <div class="container">
        <div class="form-box">
            <form action="/register" method="post"  enctype="multipart/form-data">
                <input type="text" name="name" placeholder="Enter Your name" autocomplete="off">
                <input type="email" name="email" placeholder="Enter Your email" autocomplete="off">
                <input type="password" name="password" placeholder="Enter password" autocomplete="off">
                <input type="password" name="cpassword" placeholder="Confirm your password" autocomplete="off">

                <button type="submit" name="submit">Register</button>
            </form>
        </div>
    </div>
</body>
</html>

我的文件结构:

【问题讨论】:

  • 我可能是错的,尽管尝试在您的 &lt;form&gt; 中删除 enctype='multipart/formdata'。让我知道它是否有效,我会发布一个详细说明的答案。
  • 是的,它有效。

标签: html node.js express


【解决方案1】:

您的&lt;form&gt; 元素设置为发送使用multipart/form-data 编码的POST 请求,因此使用Express 接收的有效负载不能简单地从req.body 元素中获取值。 multipart/form-data 编码用于编码和发送文件, 所以在这样的正常形式中,它是不需要的。

默认情况下,如果未提供 enctype 属性,则使用 application/x-www-form-urlencoded,这允许通过 Express 中的请求正文访问您的 POST 有效负载。

<form action="/register" method="POST">
    <input type="text" name="name">
    <button type="submit">Submit</button>
</form>
app.post("/register", (req, res) => {
    const name = req.body.name; // Fetches the 'name' input's value.
    ...
});

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2018-07-23
    • 1970-01-01
    相关资源
    最近更新 更多