【问题标题】:NodeJS POST to server with array as name attribute使用数组作为名称属性的 NodeJS POST 到服务器
【发布时间】:2018-02-18 12:27:38
【问题描述】:

首先,我必须澄清我不能使用 express 模块,只能使用节点版本 9.x.x 中的默认模块 我有一个包含基本用户信息(姓名、生日、电子邮件)的表单。此表单可以一次发布多个用户信息,服务器在解析为对象时会区分这些信息。我的问题是每个用户都可以输入任意数量的电子邮件,并且我不知道如何发布电子邮件属性而不将其合并到查询字符串中的二维数组中。下面是一个示例表格;如您所见,每个用户可以输入 2 封电子邮件。

<form method="POST" action="http://localhost:29184/" id="user">
    <label>First Name:</label>
    <input type="text" name="fName"><br>
    <label>Last Name:</label>
    <input type="text" name="lName"><br>
    <label>Birthdate:</label>
    <input type="date" name="bday"><br>
    <label>Email1:</label>
    <input type="text" name="email[0]"><br>
    <label>Email2:</label>
    <input type="text" name="email[0]"><br>
    <h2>Another user</h2>
    <label>First Name:</label>
    <input type="text" name="fName"><br>
    <label>Last Name:</label>
    <input type="text" name="lName"><br>
    <label>Birthdate:</label>
    <input type="date" name="bday"><br>
    <label>Email1:</label>
    <input type="text" name="email[1]"><br>
    <label>Email2:</label>
    <input type="text" name="email[1]"><br>
    <input type="submit" value="POST">
</form>

这就是我在我的 nodejs 服务器中解析它的方式:

    var body = '';
    req.on('data', function(data) {
        body += data.toString();
    });
    req.on('end', function() {
        var postObj = qs.parse(body);
        console.log(postObj);
        res.writeHeader(200, {"Content-Type": "text/html"});  
        fs.createReadStream("form.html").pipe(res);
        //res.end();
    });

postObj 日志为:

{ fName: [ 'name1', 'name2' ],
  lName: [ 'last1', 'last2' ],
  bday: [ '111111-11-11', '2222-02-02' ],
  'email[0]': [ 'e1-1', 'e1-2' ],
  'email[1]': [ 'e2-1', 'e2-2' ] }

我可以访问 postObj.fName[0] 就好了,但是我不能访问 email[0][0] 作为一个数组。任何建议表示赞赏!

【问题讨论】:

  • 我最终添加了另一个隐藏的输入标签,它存储了用户电子邮件的数量,当用户希望添加另一封电子邮件时,它会在客户端 javascript 上更新。将所有电子邮件发布在一个数组中,并让服务器计算每个用户拥有的电子邮件数量。很抱歉这个令人困惑的问题。

标签: javascript node.js post npm query-string


【解决方案1】:

尝试以postObj['email[0]'][0] 访问属性。

顺便说一句,email[0]email[1] 是不幸的属性名称,会导致混淆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    相关资源
    最近更新 更多