Я конвертирую бэкэнд Php в NodeJS. В PHP я написал форму, в которой использовал массив для отправки нескольких похожих типов данных (например, места, которые вы посетили в прошлом), я знал, что почти аналогичная версия JS будет работать для ExpressJS. Однако всякий раз, когда я пытаюсь получить доступ к переменной, она выводит «undefined», и свойство length массива также не работает.
Код ExpressJS:
router.post('/hello', function(req, res)
{
var locations = [];
var apple = ["apple", "banana"];
var name = req.body.name;
locations = req.body.location;
console.log(name + " <<>> "+ locations);
console.log(apple);
return;
});
Следующий код возвращает следующий вывод:
POST /new/hello - - ms - -
Bangladesh <<>> undefined
[ 'apple', 'banana' ]
Форма HTML приведена ниже:
<form role="form" action="/new/hello" method="POST">
<div class="form-group">
<label for="email"> Trek name: </label>
<input type = "text" class = "form-control"name="name">
</div>
<div class="form-group">
<label for="location">trek_location 1: </label>
<input type="text" class="form-control" id="text" name="location[]">
</div>
<div class="form-group">
<label for="location">trek_location 2: </label>
<input type="text" class="form-control" id="text" name="location[]">
</div>
<div class="form-group">
<label for="location">trek_location 3: </label>
<input type="text" class="form-control" id="text" name="location[]">
</div>
<div class="form-group">
<label for="location">trek_location 4: </label>
<input type="text" class="form-control" id="text" name="location[]">
</div>
<button type ="submit" class="btn btn-default"> Submit </button>
</form>
Я использовал эту же форму для моего бэкэнда Php, и это сработало. Я много гуглил и везде метод один и тот же для извлечения массива из формы. Тем не менее, это не работает для меня!
Я успешно сделал то, что вы пытаетесь достичь, и мой код отличается от вашего в двух областях:
В моей HTML-форме входное имя не содержит скобок массива, т.е. мой HTML выглядит так:
Я использую экспресс-связующее ПО под названием bodyparser
(Я думаю, что где-то читал, что это уже предустановлено в последней экспресс-версии, но, возможно, стоит попробовать.)
Также есть предостережение: если у вас есть несколько локаций, отправленных на сервер, вы получите хороший массив. Если у вас есть только одно местоположение, вы получите этот один элемент, а не массив, содержащий элемент. Поэтому обязательно проверьте это в бэкэнде.
Других решений пока нет …