Node.js调用SQL Server预查询单引号转义输出反斜杠异常如何解决
问题根因
- SQL Server 中单引号的转义规则是两个连续单引号,而非反斜杠转义,你在SQL中用
\转义单引号本身不符合SQL Server语法规则 - JS 中反斜杠是特殊转义字符,你写的
replace("\", "'")存在语法错误:单个\会转义后面的双引号,导致字符串匹配逻辑完全失效 - 手动拼接JSON字符串容易触发转义冲突,是导致你输出异常的核心原因之一
可行解决方法
方案1:直接修改SQL语句(最推荐)
把SQL里的转义逻辑换成SQL Server原生支持的单引号转义,不需要后续JS处理:
INSERT INTO @Return SELECT 'You' + '''' + 've assigned ' + CONVERT(varchar(4), COUNT(1)) + ' to yourself'
两个连续的'在SQL Server执行后会自动输出为1个单引号,拿到的strMessage直接就是You've assigned X to yourself
方案2:修正JS中的字符串替换逻辑
如果不想改SQL,就修正replace的写法:
反斜杠在JS字符串中需要用两个反斜杠表示,要全局替换的话需要加正则的g标识:
// 替换所有反斜杠为单引号 strMessage = strMessage.replace(/\\/g, "'");
方案3:修复JSON拼接逻辑(必改,避免后续其他转义问题)
不要手动拼接JSON字符串,用JSON.stringify自动处理所有转义字符,避免特殊字符导致的JSON格式错误:
function GbWebhookFunction(){ this.sendMessage = async function(strMessage){ console.log(strMessage); // 用JSON.stringify自动生成合法的JSON内容 const body = JSON.stringify({ text: strMessage }); fetch(webhookURL, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: body, }).then((response) => { console.log(response); }); }; };
内容的提问来源于stack exchange,提问作者Trè254
相关产品推荐
相关产品推荐

