Я знаю, что подобный вопрос задавался много раз, например. здесь.
Однако я безуспешно пробовал применять различные решения из этих ответов.
Вот моя клиентская страница:
<form id="submit_newuser" method="POST" action="/submit_newuser">
User name:
<input type="text" id="username" name="username" />
<br>
Phone number:
<input type="text" id="phonenumber" name="phonenumber" />
<br><br>
<input type="submit" />
</form>
<script>
document.getElementById("submit_newuser").addEventListener('submit',submit_newuser);
function submit_newuser(event){
event.preventDefault();
submit_newuserForm=document.getElementById("submit_newuser");
formData=new FormData(submit_newuserForm);
fetch("/submit_newuser",{
body:formData,
headers:{
"Content-Type": "application/json"
},
method:"post"
})
.then(response=>console.log(response))
.catch(err=>"submit_newuser: error: "+err);
}
</script>
А вот соответствующий серверный код для конечной точки /submit_newuser
:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/submit_newuser',function(req,res){
console.log("/submit_newuser: req.body: "+JSON.stringify(req.body));
var phonenumber=req.body.phonenumber;
var username=req.body.username;
var output="you submitted: "+username+" "+phonenumber;
console.log("/submit_newuser: text to send back: "+output);
res.send(output);
});
При этом, когда я отправляю данные со страницы, сервер регистрирует эту ошибку:
SyntaxError: Unexpected token - in JSON at position 0
Когда я меняю Content-Type на «application/x-www-form-urlencoded», я получаю запись в консоли:
/submit_newuser: req.body: {"------WebKitFormBoundaryBDU4OcntAv7d5wWL\r\nContent-Disposition: form-data; name":"\"username\"\r\n\r\ntestUserName\r\n------WebKitFormBoundaryBDU4OcntAv7d5wWL\r\nContent-Disposition: form-data; name=\"phonenumber\"\r\n\r\ntestPhoneNumber\r\n------WebKitFormBoundaryBDU4OcntAv7d5wWL--\r\n"}
/submit_newuser: text to send back: you submitted: undefined undefined
Это указывает на то, что данные отправляются на сервер, но не анализируются должным образом в req.body
.
Решения, связанные с multer
, похоже, здесь не применимы, потому что я не загружаю файл, но я не уверен, что мне следует использовать другой подход, чем публикация объекта FormData
в теле fetch()
.
Я в замешательстве, а также интересно, есть ли более простой способ сделать это. Я просто хочу отправлять данные формы на сервер, не вызывая обновления страницы, и иметь возможность обновлять элементы страницы с помощью ответа сервера.
multipart/form-data
, а не json. - person Molda   schedule 21.08.2019