React.js使用axios发送整数数据,但在Node.js中获取[object object]

时间:2018-10-02 18:40:43

标签: javascript node.js reactjs axios

我试图使用axios中的React向后端发送一个整数以执行一些计算。但是,在后端,我得到了[object object]。我尝试通过执行console.log(Object.getOwnPropertyNames(req.body))来查看对象中有什么,它返回空对象

我也在使用正文解析器。我的另一条路线是使用axios发送数据(对象),效果很好。整数不是在body.parse中视为纯整数吗?

const express = require('express');
const app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());


app.post('/buy', (req, res) => {
  MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("wallet");
    var myquery = { amount: {$gt: 0} }
    console.log("New Amount:" + req.body)
    console.log(Object.getOwnPropertyNames(req.body))
    var newquery = { $set: {amount: req.body}}
    /*dbo.collection("account").updateOne(myquery, newquery, function(err, re) {
      if (err) throw err;
      console.log("Wallet updated")
      db.close();
    });*/
  });
});

我的反应:

handleSubmit(e){
    e.preventDefault()
    var remain = this.state.wallet - this.state.total
    console.log(remain)

    axios({ method: 'post', url: '/buy', data: remain})
}

4 个答案:

答案 0 :(得分:1)

我通过将数字放入对象中来解决该问题,

axios({ method: 'post', url: '/buy', data: { amount : remain}})

现在它正在发送正确的信息。感谢解释为什么会导致错误

答案 1 :(得分:0)

通常,数字,布尔值,字符串和没有任何对象或数组的null都是有效的json。但是writerows在其自动检测过程中不会默认将它们视为JSON,只有具有axios内容类型的typeof等于object的那些才会被发送。 / p>

您需要自己设置application/json标头:

content-type

现在,axios将发送带有“正确” 内容类型标头的内容,以便接收方将其视为JSON。

但是现在axios({ method: 'post', url: '/buy', data: 1, headers: { 'Content-Type': 'application/json; charset=utf-8' }}) 会抱怨收到的数据不是有效的json。这是由于以下选项:

  

严格
   设置为body-parser时,将仅接受数组和对象; true将接受false接受的任何内容。默认为JSON.parse

您的代码可以与true的选项strict: falsebody-parser的{​​{1}}标头设置一起使用。

因此可以使其工作,但最简单的方法是将整数包装到对象中。

答案 2 :(得分:-1)

您正在控制台日志中将对象与字符串连接起来

console.log("New Amount:" + req.body)

尝试以下方法:

console.log("New Amount:", req.body)

答案 3 :(得分:-1)

由于您使用req.body.something访问请求正文。数据属性必须是对象类型{}。 像这样

data: { remain }

因此您可以使用

从服务器访问
req.body.remain