2016-08-13 3 views
0

Я пытаюсь разобрать элемент (выпадающего) окна на сообщении формы.Parsing html elelments по форме POST в NodeJS

Тело запроса содержит только элемент 'txt1'. Никаких признаков элемента lstSelect.

Я знаю, что должен использовать тело-парсер, но не знаю, как и какой?

Это шаблон Джейд:

extends layout 
    block content 
    .jumbotron 
     h1 Calculator 
     form(action='/calc',method='post', id="tableForm") 
      p 
      select(name="lstSelect", id="lstSelect", size ="5") 
      option(value='one') One 
      option(value='two') Two 
      option(value='three') Three 
      p 
      input(type='text', name='txt1', id='txt1') 
      p 
      input(type='submit' name='StdDev', value='StdDev') 

Это файл NodeJS:

//"use strict"; 
var express = require('express'); 
var routes = require('./routes/index'); 
var api = require('./routes/api/index'); 
var http = require('http'); 
var path = require('path'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var multiparty = require('multiparty'); 
// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 
app.use(require('stylus').middleware(path.join(__dirname, 'public'))); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.post('/calc', function (req, res) { 
    var lstSelect = req.body.lstSelect; <- undefined 
    var form = new multiparty.Form(); 
    form.parse(req, function (err, fields, files) { 
     // fields fields fields 
     var x = 1; <- bp never reached 
    }); 
    var b = req.body; <- only txt1 element is here 
}); 

EDIT: большой недостаток. Выбранное значение находится в request.body, но мне все еще нужен полный список. Мне нужен массив значений окна «Выбрать».

ответ

0

select не имеет никаких option элементов, поэтому он пропускается при отправке. Следующее должно исправить это;

extends layout 

block content 
    .jumbotron 
     h1 Calculator 
     form(action='/calc', method='post', id='tableForm') 
      p 
       select(name='lstSelect', id='lstSelect', size='5') 
        option(value='one') One 
        option(value='two') Two 
        option(value='three') Three 
      p 
       input(type='text', name='txt1', id='txt1') 
      p 
       input(type='submit' name='StdDev', value='StdDev') 

Также исправлены некоторые отступы, поэтому ваши элементы ввода находятся внутри абзацев.

+0

спасибо. это правда. но все еще не решает проблему. – Jalle

+0

Теперь проблема с отступом. 'select' должен быть одним отступом внутри' p' и '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. Ваш текущий отступ означает, что они братья и сестры, а не дети. Посмотрите на мой ответ за правильный отступ. – alizahid