我试图使用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})
}
答案 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: false
和body-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