Express. js: данные POST отправляются ТОЛЬКО КЛЮЧОМ в моем объекте req.body - PullRequest
2 голосов
/ 20 января 2020

У меня сейчас проблема с моим POST-запросом.

У меня есть простая функция, которая отвечает за отправку данных на мой сервер с использованием AJAX.

handleSubmit(event) {

var http = new XMLHttpRequest(); // object allwos us to make http requests 

//Lets make a request
http.open("POST", "http://localhost:3000/register", true);//set up the request for us: type of request we want, where we want the data from, do we want it to be sync or async?

http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

//each time the ready state changes on the http object, it will fire this function. 
http.onreadystatechange = function(){
    console.log(http); // lets see the ready state changing... 

    //once the ready state hits 4(request is completed) && status is 200 (which is okay), lets do something with data.
    if(http.readyState == 4 && http.status == 200){

    }else{
      console.log('Error: ' + http.status); // An error occurred during the request.
    }
}

let user = {
  email: "john@gmail.com"
};

http.send(JSON.stringify(user));
}

Мой код на стороне сервера довольно прост и содержит конечную точку POST.

const express = require('express')
const app = express()
const port = 3000

//Body Parser Middleware
app.use(express.json());
app.use(express.urlencoded({extended: true}))

app.post('/register', (req, res) => {
    console.log(req);
})

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

Теперь, после того, как handleSubmit сработает, тело запроса моего объекта становится следующим:

{ '{"email":"john@gmail.com"}': '' }

Я очень смущен и не совсем уверен, как поступить.

Спасибо!

Ответы [ 3 ]

1 голос
/ 20 января 2020

Все вроде бы хорошо, Вы должны объявить Заголовок как json,

http.setRequestHeader("Content-type", "application/json");
0 голосов
/ 20 января 2020

Я пытался запустить это, я многому научился. Вы отправляете json объект как данные, но для типа содержимого установлено значение application/x-www-form-urlencoded для json тип данных для содержимого должен быть application/json, но почему-то он не работает для меня.

I сделал несколько тестов и на этом я закончил

const http = new XMLHttpRequest();
const url = "http://localhost:3000/register";

const json = JSON.stringify(user);

http.open("POST", url, true);

// In order to sent JSON you need to set this, but somehow it's not working
// http.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
// http.send(JSON.stringify(user));

// In order to work with this type app, you need to send data as a string like below
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.send('id=1&isAdmin=false&email=john@gmail.com')
0 голосов
/ 20 января 2020

Попробуйте {email: "name@gmail.com", id:1 }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...