【问题标题】:Form POST requests are empty / undefined using NODE使用 NODE 的表单 POST 请求为空/未定义
【发布时间】:2020-05-20 16:19:01
【问题描述】:

我在 API 中设置路由,即使是简单的表单似乎也根本不会发送任何数据。这是一个简单的html表单:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test form</title>
</head>
<body>

<form action="/comments" method="POST">
    <label for="name">Name:</label><br>
    <input type="text" id="name" name="name" value="John"><br>
    <label for="email">Email:</label><br>
    <input type="email" id="email" name="email" value="Doe"><br>
    <label for="comments">Comments:</label><br>
    <input type="text" id="comments" name="comments" value="Some comments"><br><br>
    <input type="submit" value="Submit">
</form>

</body>
</html>

这是在 Node 中运行的 app.js:

const http = require('http');
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const morgan = require('morgan')

const hostname = '127.0.0.1';
const port = 3000;

const server = express();
const router = express.Router();

server.use(express.static(__dirname));

server.use(bodyParser.json());
server.use(morgan('dev'));

server.post('/comments', (req, res) => {
  console.log('reached this API call');
  console.log('sending back to homepage');
  console.log('you sent: ' + req.body);
  res.sendFile(path.join(__dirname + '/index.html'));

});

router.get('/', (req, res) => {
  res.sendFile(path.join(__dirname + '/index.html'));
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

这是我单击提交按钮后在控制台中看到的内容:

服务器运行在http://127.0.0.1:3000/
已到达此 API 调用
返回首页
您发送:[object Object]
POST /cmets 200 2.944 毫秒 - 20059

[object Object] 中没有数据。我试过访问 req.body.name 并且它是未定义的。我在这里错过了什么?

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    application/x-www-form-urlencodedpost数据的解析需要添加

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

    为了正确记录完整的req.body

    const util = require('util');
    
    console.log('you sent: ' + util.inspect(req.body, { showHidden: false, depth: null }));
    

    【讨论】:

      【解决方案2】:

      我找到了问题的答案。 Vishnu 关于使用 bodyParser 的 urlencoded 方法是正确的——但真正的问题是由于 .htaccess 文件。我必须为 POST 请求添加以下内容才能通过:

      Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
      Header always set Access-Control-Max-Age "1000"
      Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
      

      在没有明确允许标头方法的情况下,GoDaddy 共享主机阻止了它们。

      【讨论】:

        猜你喜欢
        • 2022-01-20
        • 2021-09-11
        • 1970-01-01
        • 2017-10-13
        • 2019-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-16
        相关资源
        最近更新 更多