2014-10-18 3 views
0

Я пытаюсь отправить форму с полями двумерного массива в post request в node.js. Но он не дает правильный массив на стороне сервера. Я получаю один размерный массив, содержащий все значения.Ошибка узла node.js на двумерном массиве

Здесь форма

<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> 

Я использую экспресс-4 с bodyparser, определенной в моем приложении.

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

при попытке доступа к значению массива, как этот

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

тогда я получаю значение ошибки не определено.

Как я могу это решить?

ответ

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); 

Затем после нажатия кнопки Submit что-то вроде этого отображается в браузере: ["asdf","fdsa"]

+0

На какой версии вы попробуете это? Моя версия узла v0.10.31 и body-parser v1.0.0. и я все еще не могу получить данные. – mabc224

+0

узел v0.10.30 и новый 'npm install express body-parser', поэтому это означает, что на данный момент выражение выражает 4.9.8 и body-parser 1.9.0. – mscdex

+0

В 'body-parser' была проблема, я просто обновил ее, и теперь она дает этот результат. '[{ "Имя": [ "LCD", "MotherBoard"], "серийный": [ "12345D", "12345D"], "убывание": " 77"[ "19 \" "]," производитель ": [" Hp "," DELL "]}]', но я хочу, чтобы этот вид выводился '[{« serial »:« 12345D »,« name »:« LCD »,« desc »:«. 77 », «maker»: «Hp»}, {«serial»: «12345D», «name»: «LCD», «desc»: «. 77», «maker»: «Hp»}] 'как я могу получить это ? – mabc224

0

Там не было никаких проблем в коде. Я неправильно обращался к значениям парсинга.

Смежные вопросы