无法将对象转换为原始值

时间:2016-12-15 12:57:16

标签: javascript node.js

我将数据发布到节点服务器:

{
  "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:无法将对象转换为原始值

我不明白。那么如何获取数据?

5 个答案:

答案 0 :(得分:6)

console.log用于记录字符串或简单值

正如文档所说,你可以格式化输出,例如json console.log("body: %j", req.body)

或者,更好的是,使用console.dir来记录对象

答案 1 :(得分:2)

要检查的要点。

  1. 标题类型应为 application / json
  2. 检查json是否字符串化
  3. 角度代码

     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中启用了
    1. Cors - 快速代码

      var cors = require(' cors'); app.use(CORS());

    2. 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}