TypeError:无法将对象转换为原始值

时间:2019-01-02 22:22:06

标签: javascript jquery node.js

我有一个文本编辑器(div),其中有一个function来格式化其中的(选定)文本。当我标记文本的一部分并选择使其看起来像this(代码段)时,我必须使用 以避免出现一些错误并使其易于使用。但是,此数据正在发送到服务器(nodeJS),并且会导致一个错误,该错误将内容拆分为一个对象,为避免此问题,我想在将 替换为空格后再发送给服务器。

我所做的是以下

// replace   by " "
let content = $('.editor').html().replace(/( )/gi, " ");

// replace editor html
$('.editor').html(content);

// print results
console.log("html: ",$('.editor').html());

在控制台中,它显示期望的内容(文本:as <code>dasdasd</code>):

html:  as<span> </span><code>dasdasd</code><span> </span>

但是在服务器端,我遇到以下错误:

TypeError: Cannot convert object to primitive value

然后我决定打印包含编辑器内容的变量(看起来不错吗?):

{ posterContent: 'as<span> </span><code>dasdasd</code><span> </span>' }

问题:如何避免用空格替换&nbsp;,而不必将html转换为(字符串)以避免这种错误?

1 个答案:

答案 0 :(得分:1)

我知道您已经解决了该问题,但是您可能会对阅读此书感兴趣,因为您的问题是由于对Web开发的基本概念(数据编码)的误解引起的。

据我了解,您无法将字符串&nbsp;传递到后端,因为它被解析为对象,因此我假设您使用GET或POST的application/x-www-form-urlencoded编码进行发送请求。简单来说:

// this object
{
  a: 10,
  b: 20
}

// get passed to the server as this string
a=10&b=20

哪个好。那是一种方法。但是您必须处理用于发送特殊字符的正确编码,例如:

// you have this object:
{
  a: 10,
  b: 'hello&world'
}

// you encode it naively to this
a=10&b=hello&nbsp;world

// the server understands this
{
  a: 10,
  b: 'hello',
  nbsp: ';world'
}

&会创建bug,因为它是一个特殊字符,不会被当作字符串的一部分来对待。 即使您发现不使用&nbsp或将其替换为空格的技巧,也将认为您已经解决了问题,但是... 几乎所有unicode字符都是特殊字符并且需要进行编码,以免产生错误。

使用encodeURIComponent对字符串进行编码,或使用其他编码(例如JSON)发布数据。我个人将使用fetch之类的函数来为您完成所有工作,并为您避免所有与编码有关的问题:

let data = {
  userId: 1,
  id: 1
}

fetch('https://jsonplaceholder.typicode.com/posts',{
  method: 'POST',
  data: JSON.stringify(data)
})
.then(resp => resp.json())
.then(json => console.log(json));