2017-04-25 80 views
0

我正面临着一些转义斜线的问题,下面是我尝试过的代码片段。问题是如何将带有斜线斜线的变量分配给另一个变量。NodeJS转义斜杠

var s = 'domain\\username'; 
var options = { 
    user : '' 
}; 
options.user = s; 

console.log(s); // Output : domain\username - CORRECT 
console.log(options); // Output : { user: 'domain\\username' } - WRONG 

当我打印options对象两个斜线来了么?

我感觉我真的/严重错误在这里做一些事情,这可能是基础。

更新:

当我使用这个对象options值传递,因为它是(有双斜线),和我用这与我的SOAP服务,并获得401错误是由于无效的用户属性值。

但是,当我尝试使用相同的用户值的PHP代码相同的给予适当的响应,在PHP中,我们也用两个斜杠来转义该值。

+0

最有可能的控制台逃避字符串,因为..它比替代方案更好。 –

+0

@JanDvorak谢谢,但我真的很抱歉没有完全明白你的意思。 – Dipak

+0

你确定你的代码是正确的吗?运行,给我一个错误,因为选项中不存在'wsdl_headers'。 – user3432422

回答

2

输出正确。

当你设置变量,转义反斜杠被解释成一个单一的代码点。

但是,options是一个记录时显示为JSON blob的对象。此时反斜杠将被重新转义,因为这是反斜杠在JSON输出中作为字符串值有效显示的唯一方式。

如果您将console.log(options)的JSON输出重新读入javascript(使用JSON.parse()或类似方法),然后输出用户密钥,则只会显示一个反斜杠。

(以下问题编辑:)

这可能是为您的数据通过SOAP消费服务被接受,需要将数据带明确逃脱。分配值时,在这种情况下,您将需要双逃避它:

var s = 'domain\\\\user' 

要明确确定是否需要做这个或没有,我建议你把你的工作的PHP应用程序之间的代理SOAP应用程序,并检查流量。

+0

谢谢,请你检查更新后的问题。 – Dipak

+0

经过更新以反映提及使用SOAP服务的问题编辑。 – Benjamin

2

当你console.log()一个对象,它首先转换为字符串使用util.inspect()util.inspect()格式串的属性值作为文字(很像,如果你要JSON.stringify(s))更容易地/准确地显示字符串(其可包含控制字符比如\n)。这样做时,它必须转义字符串中的某些字符,以便它们是有效的Javascript字符串,这就是为什么您会看到反斜杠在您的代码中转义的原因。

+0

谢谢,但我将如何在API服务中使用值为'\\'的对象,因为数据就像传递一样,会引发401错误。 – Dipak

+0

您已经正确地转义了反斜杠。您的API错误状态的原因很可能在其他地方。 – mscdex

+0

但是'API'对象给''错误响应'消息'我传递了'错误响应'消息,因为我可以看到'用户属性'值有两个斜杠。但是,当我尝试使用相同用户值的'PHP代码'给出正确的响应时,在PHP中我们也用'两个斜杠'来转义这个值。 – Dipak