[英]Cannot convert object to primitive value
我将数据发布到节点服务器:
{
"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": ""
}]
}
我尝试在快速服务器中 console.log 数据:
console.log(req.body)
但出现错误:
类型错误:无法将对象转换为原始值
我不明白。 那么我怎样才能得到数据呢?
console.log用于记录字符串或简单值
正如文档所说,您可以将输出格式化为 json,例如console.log("body: %j", req.body)
或者,更好的是,使用console.dir按原样记录对象
要检查的要点。
角码
headers.append('Content-Type', 'application/json');
this.http.post(url, JSON.stringify(body), { headers: headers }).map((data: Response) => data.json()).catch(this.handleError);
在 nodeJs 中的 server.js 中启用了Cors - 快速代码
var cors = require('cors'); app.use(cors());
4.现在api.js(或somefile.js )中的 req.body 应该有从 angular 形式传递的 json 数据
以上是其中一个为我工作的结合。 有些人通过从 angular 发送 json 并尝试在 nodejs 中再次解析 json 对象而面临错误,这会导致错误。
很少有飞行前错误。 实际上,浏览器可能首先发送带有方法 OPTIONS 的预检请求,以获取允许的来源、标头和方法。 因此启用 cors 有助于避免此错误。
导致此错误消息的原因通常是系统尝试将某个对象转换为字符串,但无法从它尝试显示为字符串的对象中生成字符串。
如果一个值不继承 Object 但它是一种更原始的值类型,因此它不会从 Object.prototype 继承 toString() 方法,那么通常就是这种情况。
例如
Object.create(null) + ''
导致此错误,因为 + "" 基本上与调用您尝试 + "" 的值的方法 toString() 的含义相同。 但是由于 Object.create(null) 没有从 Object.prototype 继承 toString() 方法,这会导致错误。
相似地
(Object.create(null)) .toString()
产生同样的错误。
如果您将自己的方法 toString() 添加到这样的值,您添加的方法必须返回一个字符串,否则您将再次收到相同的错误消息,因为系统随后调用了您的 toString() 方法,但不会产生字符串。
所以当心试图在日志等中打印出不是对象的值。 另一种情况是,如果您使用这样的值调用 alert() 或 confirm() 等。
一般情况下console.log(req.body)
但是当你处理put
你最好ty out console.log('request body: ',req.body);
不要
此错误背后的实际原因
当 Javascript 尝试将对象转换为字符串时。
Javascript 将尝试调用该对象的toString()
方法。 大多数 Javascript 对象都有从Object.prototype
继承的toString()
方法。 但是其中一些具有null prototype
,没有toString()
方法,因此 Javascript 将无法将这些对象转换为字符串原语。 并且can't convert object to primitive error will rise
。
在Javascript中创建一个空原型对象使用这个方法
let travel = Object.create(null)
解决方案
travel = {...travel}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.