在 Node.JS 中获取 http post 表单数据

Posted

技术标签:

【中文标题】在 Node.JS 中获取 http post 表单数据【英文标题】:Getting http post form data in Node.JS 【发布时间】:2017-12-14 12:32:45 【问题描述】:

嘿,我正在尝试使用 express 和 node 发送发布请求,这是我的代码。

index.html

<html>

<head>
    <title>Test</title>
</head>

<body>
    <form action="/form" method="POST" enctype="multipart/form-data">
        <input type="text" name="imagename"></input>
        <input type="submit" name="submit" value="submit"></input>
    </form>
</body>

</html>

我的 app.js 文件如下:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded(
   extended: true
));
app.use(bodyParser.json());

app.post('/form', function(req, res)
 res.setHeader('Content-Type', 'application/json');
 setTimeout(function()
     res.send(JSON.stringify(
        imagename: req.body.imagename || null

    ));
  , 1000);
);

现在我应该将输出作为 imagename: //value 添加到表单中,如果为真,否则为空。而且我总是得到一个空值。我试图记录 req.body.imagename 的值,但我得到的是未定义的,而不是我在表单中插入的值。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您必须将body-parser 添加到您的 Express 应用中。

var app = express();
var bodyParser = require('body-parser');

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

// parse application/json
app.use(bodyParser.json());

但是,我看到您使用enctype='multipart/formdata' 声明了您的表单。这通常用于进行文件上传,如果确实需要,则需要使用another parser。

【讨论】:

我正在尝试添加一个文件,所以我使用了 multipart/formdata。我已经包含了bodyparser的两行,只是忘了在这里复制。但是因为没有任何工作,我认为首先让文本工作,然后我会查看文件并评论文件上传部分。谢谢。 @JonathanLonowski 和 Edmundo Rodrigues 非常感谢您的反馈。当我从表单中删除多部分时,我能够发送数据。现在我将尝试使用 mulder 并希望它适用于这些文件。干杯。【参考方案2】:

您需要 'body-parser' 中间件,但忘记在您的 express 应用程序中使用它。

app.use(bodyParser.urlencoded())

你不需要这个

enctype="multipart/form-data"

【讨论】:

我的代码中已经有了 app.use(bodyParser.urlencoded()) 只是忘了复制到这里。我需要第二部分,因为我将来会使用文件上传。

以上是关于在 Node.JS 中获取 http post 表单数据的主要内容,如果未能解决你的问题,请参考以下文章

Node.js:get/post请求全局对象工具模块

node.jsGET/POST请求Web 模块

node.js能否接收http post数据吗

Node.js GET/POST请求

三.node.js中获取post请求的两种方式

如何在 node.js 中使用 token(post) Mysql?