二维数组上的node.js服务器错误

时间:2014-10-18 19:29:50

标签: javascript html arrays node.js

我正在尝试在node.js中的post请求上提交带有二维数组字段的表单。但它没有在服务器端提供正确的数组。我收到一个包含所有值的一维数组。

这是表格

<form method="post" action="/add">
<div id="row1">
    <input name="type[][serial]" type="text">
    <input name="type[][desc]" type="text">
    <select name="type[][name]">
        <option value="VAL1">VAL1</option>
        <option value="VAL2">VAL2</option>
        <option value="VAL3">VAL3</option>
    </select>
    <input name="type[][maker]" type="text">
</div>
<div id="row2">
    <input name="type[][serial]" type="text">
    <input name="type[][desc]" type="text">
    <select name="type[][name]">
        <option value="VAL1">VAL1</option>
        <option value="VAL2">VAL2</option>
        <option value="VAL3">VAL3</option>
    </select>
    <input name="type[][maker]" type="text">
</div>
<input type="submit" value="Submit">
</form>

我在我的应用程序中定义了使用bodyparser的express 4。

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

当我尝试像这样访问数组的值时

var hd =  req.body.type;
var serial =  hd[0]['serial'];

然后我得到错误值undefined。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

它对我有用:

var app = require('express')();

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

app.get('/', function(req, res) {
  res.send('<form method="post" action="/add">\
    <div id="row1">\
        <input name="type[][serial]" type="text">\
        <input name="type[][desc]" type="text">\
        <select name="type[][name]">\
            <option value="VAL1">VAL1</option>\
            <option value="VAL2">VAL2</option>\
            <option value="VAL3">VAL3</option>\
        </select>\
        <input name="type[][maker]" type="text">\
    </div>\
    <div id="row2">\
        <input name="type[][serial]" type="text">\
        <input name="type[][desc]" type="text">\
        <select name="type[][name]">\
            <option value="VAL1">VAL1</option>\
            <option value="VAL2">VAL2</option>\
            <option value="VAL3">VAL3</option>\
        </select>\
        <input name="type[][maker]" type="text">\
    </div>\
    <input type="submit" value="Submit">\
    </form>\
  ');
});

app.post('/add', function(req, res) {
  res.json(req.body.type[0]['serial']);
});

app.listen(9000);

然后按下提交后,浏览器中会显示以下内容:["asdf","fdsa"]

答案 1 :(得分:0)

代码没有问题。我正在错误地访问和解析值。