#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’ тем, что вы действительно хотите использовать для своей реализации.