我将数据发布到节点服务器:
{
"form_1": [{
"resultName": "",
"level": "",
"unitOrder": "",
"winner": "",
"winnerOrder": "",
"date": "1",
"score": ""
}],
"form_2": [{
"resultName": "",
"level": "",
"unitOrder": "",
"winner": "",
"winnerOrder": "",
"date": "1",
"score": ""
}],
"form_3": [{
"resultName": "",
"level": "",
"unitOrder": "",
"winner": "",
"winnerOrder": "",
"date": "1",
"score": ""
}]
}
我尝试在express.log中使用快速服务器中的数据:
console.log(req.body)
但是出现了错误:
TypeError:无法将对象转换为原始值
我不明白。那么如何获取数据?
答案 0 :(得分:6)
console.log用于记录字符串或简单值
正如文档所说,你可以格式化输出,例如json console.log("body: %j", req.body)
或者,更好的是,使用console.dir来记录对象
答案 1 :(得分:2)
要检查的要点。
角度代码
headers.append('Content-Type', 'application/json');
this.http.post(url, JSON.stringify(body), { headers: headers }).map((data: Response) => data.json()).catch(this.handleError);
Cors - 快速代码
var cors = require(' cors'); app.use(CORS());
4. api.js中的 req.body (或 somefile.js )应该从角形式传递json数据
上面是组合对我来说工作的那个。有些人通过从angular发送json并尝试再次在nodejs中解析json对象而导致错误而面临错误。
很少有飞行前错误。实际上,浏览器可能首先发送带有OPTIONS方法的飞行前请求,以获取允许的起源,标题和方法。因此启用cors有助于避免此错误。
答案 2 :(得分:0)
通常导致此错误消息的原因是系统尝试将某些对象转换为字符串,但无法从它试图显示为字符串的对象中生成字符串。
如果值不继承Object而是更原始的值类型,因此它不继承Object.prototype的toString()方法,通常就是这种情况。
例如
Object.create(null) + ''
导致此错误,因为+“”基本上与调用+“”的值的方法toString()相同。但是由于Object.create(null)不会从Object.prototype继承方法toString(),因此会导致错误。
类似地
(Object.create(null)) .toString()
产生同样的错误。
如果将自己的方法toString()添加到这样的值,则添加的方法必须返回字符串,否则您将再次获得相同的错误消息,因为系统随后调用了toString()方法,但不会产生串。
因此要当心尝试在日志等中打印出不是对象的值。另一种情况是,您使用这样的值调用alert()或Confirm()等。
答案 3 :(得分:0)
一般来说console.log(req.body)
,但是当你处理put
时,你最好把console.log('request body: ',req.body);
不要
答案 4 :(得分:0)
此错误背后的实际原因
当 Javascript 尝试将对象转换为字符串时。
Javascript 将尝试调用该对象的 toString()
方法。大多数 Javascript 对象都有从 toString()
继承的 Object.prototype
方法。但其中一些具有 null prototype
,没有 toString()
方法,因此 Javascript 将无法将这些对象转换为字符串原语。和can't convert object to primitive error will rise
。
在Javascript中创建一个空原型对象使用这个方法
let travel = Object.create(null)
解决方案
travel = {...travel}