У меня странное поведение на req.body при запросе пут в определенном поле - PullRequest
1 голос
/ 09 мая 2019

Я создал форму для сохранения новой недвижимости в MongoDB, используя multer для многоэлементных данных формы и анализатора тела.

Все отлично работает, кроме «комнат» в «путе»(РЕДАКТИРОВАТЬ) маршрут, который возвращается как массив, а не одно значение, что абсолютно бессмысленно, так как все остальное работает просто отлично.

Я пытался перевести данные из массива водно числовое значение, но это не работает, как будто я пытаюсь отредактировать документ еще раз, новое значение помещается в массив вместо замены старого.

//EDIT PUT ROUTE
router.put("/immobili/:_id/edit", 
upload.fields([{ name: 'estateImages', maxCount: 30 }, 
{ name: 'document', maxCount: 1 }]), 
(req, res) => {

// IMAGES LOGIC SKIPPED HERE AS NOT PERTINENT

Estate.findOneAndUpdate({ _id: requestedId }, {
    rooms: req.body.rooms, //BUGGED
    squareFeets: req.body.squareFeets, //WORKS CORRECTLY
    //CALLBACK ...
}}

// result of console.log of req.body.rooms and req.body.squareFeets
rooms: [ '2', '' ],
squareFeets: 120

//EJS FORM DATA
<form action="/estates/<%= estate._id %>/edit?_method=PUT" method="POST"
enctype="multipart/form-data">
//INPUT NOT WORKING:
<input name="rooms" value="<%= estate.rooms %>"></input>
//INPUT THAT WORKS:
<input name="superficie" value="<%= estate.squareFeets %>"></input>
<input type="submit" value="Publish">
</form>

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Когда вы получаете массив, это потому, что у вас есть несколько входов с этим именем:

<input name="rooms" value="<%= estate.rooms %>"></input>

<input name="rooms" value="other-value"></input>

Так что, если вам не нужен массив, измените имя ввода на второе.

0 голосов
/ 09 мая 2019

OMG Я был настолько глуп, я поместил два ввода с одинаковым значением имени в форме, поэтому эти значения были сохранены в виде массива.

Мне очень жаль.Спасибо за ваше время!

...