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' }})