簡體   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