开发者问题收集

从 React.js 到节点后端的 Rest 调用错误

2020-10-22
132

下面的代码从 react.js 前端和后端 node.js 执行 rest 调用,但是当我执行 rest 调用时,我在后端看到 错误:非法参数未定义 ,为了解决这个问题,我尝试在 postman 中进行 rest 调用,一切正常,错误在哪里?

前端 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
        })
    );
});
3个回答

前端react.js:

721081731

后端node.js

4252228253
Apps Maven
2020-11-04

你的后端是否实现了 json-parser?如果没有,你需要在后端实现 json-parser 来接收包含 JSON 主体的请求。

alpha-bird
2020-10-22

我在这里看到几个问题。

您正在将以下“qs.stringify(data)”传递给数据属性,它是一个字符串,结果如下: Email=test%40pmail.com&Password=my%20passwd

也就是说,您后端的 request.body 是一个空对象 {},并且您将永远不会通过这种实现获得这些值

Postman 客户端工作的原因是(我认为)您在请求的正文中传递了一个 JSON 对象,但在您的 React 应用程序中,您传递的是一个字符串。

检查“qs.stringify”方法是否是您真正想要用于实现的方法。

Raul.F
2020-10-22