Ошибка вызова Rest из React.js к серверной части узла

#javascript #node.js #reactjs #frontend #backend

#javascript #node.js #reactjs #интерфейс #серверная часть

Вопрос:

приведенный ниже код выполняет вызов rest из react.js интерфейс бэкэнд node.js но когда я выполняю вызов rest, я вижу на сервере ошибку: недопустимый аргумент не определен, чтобы исправить это, я попытался выполнить вызов rest в postman, и все работает правильно, где ошибка?

Интерфейс React.js:

 import axios from 'axios';
import server from "../../../config/config";
import qs from 'qs';

 restlogin(email,password){ 
   
    const data = { 'Email': email,'Password': password };
     const options = {
        method: 'POST',
        headers: { 'content-type': 'application/json' },
        data: qs.stringify(data),
        url: "http://172.16.53.248:8989/login"
    }
      axios(options);
  }
  

Серверная часть Node.js

 app.post("/login", async function(request, response) {

    var ret = false;
    try {
        //var data = request.body;
        var data = request.body;
        console.log("n Email: " data.Email "n Password: " data.Password);

        ret = await UserController.Login(
            data.Email,
            data.Password
        );
    } catch (err) {
        ManageError.SendError("Errore in login: "   err);
        ret = false;
    }
    response.setHeader("Content-Type", "application/json");
    response.send(
        JSON.stringify({
            return: ret
        })
    );
});
  

Комментарии:

1. Что показывает вам журнал консоли?

2. Ошибка @YoandryCollazo: недопустимый аргумент не определен

3. Какая строка в серверной части выдает эту ошибку?

4. это: ret = ожидает UserController. Вход в систему (данные.Электронная почта, данные. Пароль);

5. Не могли бы вы напечатать «данные»?

Ответ №1:

Интерфейс React.js:

 import axios from 'axios';
import server from "../../../config/config";
import qs from 'qs';


 restlogin(email,password){ 



const data = { 'Email': email,'Password': password };
 const options = {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    data: JSON.stringify(data),
    url: "http://172.16.53.248:8989/login"
}
  axios(options);


 }
  

Серверная часть Node.js

   app.post("/login", async function(request, response) {

var ret = false;
try {
    var data = JSON.parse(request.body);
    console.log("n Email: " data.Email "n Password: " data.Password);

    ret = await UserController.Login(
        data.Email,
        data.Password
    );
} catch (err) {
    ManageError.SendError("Errore in login: "   err);
    ret = false;
}
response.setHeader("Content-Type", "application/json");
response.send(
    JSON.stringify({
        return: ret
    })
);
});
  

Ответ №2:

Внедрили ли вы json-синтаксический анализатор в свой сервер? Если нет, вам необходимо реализовать json-анализатор на серверной части, чтобы получить запрос, содержащий тело JSON.

Ответ №3:

Я вижу здесь пару проблем.

Вы передаете в свойство data следующее «qs.stringify (data)», которое представляет собой строку, и результат выглядит примерно так: Email=test@pmail.comamp;Password=my passwd

Сказал, что запрос.тело в вашем бэкэнде является пустым объектом {}, и вы никогда не получите эти значения с помощью этой реализации

Причина, по которой работает клиент Postman, заключается в том, что (я думаю) вы передаете объект JSON в теле вашего запроса, но в вашем приложении React вы передаете строку.

Проверьте, является ли метод ‘qs.stringify’ тем, что вы действительно хотите использовать для своей реализации.