Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未发送Axios post参数_Javascript_Node.js_Express_Axios - Fatal编程技术网

Javascript 未发送Axios post参数

Javascript 未发送Axios post参数,javascript,node.js,express,axios,Javascript,Node.js,Express,Axios,我在react应用程序中使用Axios访问api。我试图将登录详细信息发布到服务器,但是当我记录请求主体时,我得到的是{} 请求如下: handleSubmit() { let email = this.state.email let password = this.state.password request.post("/login",{email: email, password: password}) //just prints {} on the bac

我在react应用程序中使用Axios访问api。我试图将登录详细信息发布到服务器,但是当我记录请求主体时,我得到的是
{}

请求如下:

handleSubmit() {
    let email    = this.state.email
    let password = this.state.password

    request.post("/login",{email: email, password: password}) //just prints {} on the backend
    .then((results)=>console.log(results))
    .catch((err)=>console.log(err))
}  
如果我去掉大括号,只发送一个字符串,比如
hello
,作为测试,我会得到
{hello:'}
,很明显它是工作的。在这个阶段,我已经尝试了所有的方法来获取用户在该领域的输入,但是没有成功

以下是服务器代码:

var app = express();
var bodyParser = require("body-parser");

app.use(bodyParser.urlencoded({
    extended: true
}));
app.post("/login",(req,res) => {
    console.log(req.body);
})

My api是端口4000上的节点服务器,使用express.js更新:必须将对象字符串化为querystring。你可以为此目的使用。请参阅更新的代码

由于您使用的是
body parser
bodyParser.urlencoded
中间件,请求的内容类型需要设置为“x-www-form-urlencoded”

import qs from "qs";

// ...

handleFormSubmit = event => {
    event.preventDefault();

    const requestBody = {
      email: this.state.email,
      password: this.state.password
    }

    const config = {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    }

    request.post('/login', qs.stringify(requestBody), config)
    .then(res=>console.log(res))
    .catch(err=>console.log(err))
}

更新:必须将对象字符串化为querystring。你可以为此目的使用。请参阅更新的代码

由于您使用的是
body parser
bodyParser.urlencoded
中间件,请求的内容类型需要设置为“x-www-form-urlencoded”

import qs from "qs";

// ...

handleFormSubmit = event => {
    event.preventDefault();

    const requestBody = {
      email: this.state.email,
      password: this.state.password
    }

    const config = {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    }

    request.post('/login', qs.stringify(requestBody), config)
    .then(res=>console.log(res))
    .catch(err=>console.log(err))
}

您的服务器代码是什么样子的?您的express服务器是否有JSON主体解析器中间件?是的,我正在使用主体解析器,在使用
..
之前,它都已成功运行。您的服务器代码是什么样子的?您的express服务器有JSON主体解析器中间件吗?是的,我正在使用主体解析器,在使用
之前,它都成功地工作了。不幸的是,这并没有解决问题。在进一步检查后,仍然得到
{}
,结果似乎是一种奇怪的格式:
{{“email”:joebloggs@gmail.com,“password”:“secret”}::“}
看起来整个用户的详细信息只是一个大的
值,你知道为什么吗?谢谢你指出这一点。您需要序列化数据。请参阅我的最新答案。让我知道这是否有效:)不幸的是,这并没有解决问题。在进一步检查后,仍然得到
{}
,结果似乎是一种奇怪的格式:
{{“email”:joebloggs@gmail.com,“password”:“secret”}::“}
看起来整个用户的详细信息只是一个大的
值,你知道为什么吗?谢谢你指出这一点。您需要序列化数据。请参阅我的最新答案。让我知道这是否有效:)