繁体   English   中英

无法将对象转换为原始值

[英]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按原样记录对象

要检查的要点。

  1. 标头类型应该是application/json
  2. 检查 json 是否被字符串化

角码

 headers.append('Content-Type', 'application/json');
    this.http.post(url, JSON.stringify(body), { headers: headers }).map((data: Response) => data.json()).catch(this.handleError);
  1. 在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM