string化时如何从对象中删除引号和反斜杠(无正则expression式)

我使用的Neo4j有一个子句,可以一次设置多个属性:

MATCH (p:Person) WHERE p.email = '${userEmail}' SET p += ${argsToUpdate} RETURN p AS Person 

但是,我无法将argsToUpdate放入查询中,因为Neo4j正在查找与此处显示的string完全相同的string:

  { email: 'test@test.com', age: 1337, colour: 'blue' } 

我可以使用JSON.stringify(argsToUpdate)正则expression式和strip \和“但是这是欠佳的,因为一些属性可能包含这些字符。也许他们可以先编码。

我也试过JSON.parse(JSON.stringify(argsToUpdate))

我使用util.inspect(argsToUpdate) ,它工作得很好,但我的开发人员不会接受它,因为它是一个node.jsdebugging方法。

有没有简单的方法来实现这个另一种方式?

我不想像这样做循环:

  let args = '{ ' for (let i = 0; i < Object.keys(argsToUpdate).length; i++) { args += `${prop[i]}: ${key[i]}` } args += ' }' 

有没有一个有效的方法来做到这一点? 问题是argsToUpdate包含可变数目的属性。 我希望它是dynamic的,以便代码不是那么脆弱。 有没有什么可用的ES6 +包括可以实现util.inspect(argsToUpdate)结果的babel?

假设你正在使用默认的neo4j驱动程序,你应该能够将所有parameter passing给标准的javascript数据结构中的查询,而不用担心string转义。 我认为问题是您的参数命名不正确。

Cypher参数必须由unicode字母组成,不能以货币符号开头。 反引号中包含的名称可以包含空格。 所以,应该采取下面的forms。

  • {someParam}
  • $someParam

甚至像下面的两个。

 { `some param with spaces in the name` } $`some param with spaces in the name` 

考虑到这一点,下面的查询应该工作。

 session .run('MATCH (p:Person) WHERE p.email = $userEmail SET p += $argsToUpdate RETURN p AS Person', {userEmail: 'test@test.com', argsToUpdate: { email: 'test@test.com', age: 1337, colour: 'blue' }})