You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS调用Dynamics CRM出现请求路径未转义字符TypeError求助

解决Node.js调用Dynamics CRM时的TypeError: Request path contains unescaped characters错误

嘿,这个问题我之前帮同事排查过,咱们直接说问题根源和解决办法:

问题原因

你代码里的path参数用了&来分隔查询参数,但这是HTML转义后的字符,而Node.js的https.request需要的是标准URL格式——用原始的&来分隔参数,&会被识别成未转义的非法字符,所以抛出了这个错误。

另外,手动拼接URL路径很容易出现这类转义疏漏,比如如果后续参数里有空格、特殊符号,也会触发同样的问题。

两种解决方法

方法1:直接修正路径中的转义字符

把path里所有的&替换成&即可,修正后的代码如下:

var options = { 
  path: '/api/data/v8.2/contacts?$select=address1_city,address1_line1,address1_line2,address1_line3,contactid,emailaddress1,firstname,fullname,middlename,mobilephone,statecode,suffix,telephone1,vcm_npiid,vcm_prescriberspeciality,vcm_prescriberstatus,vcm_recordtype,vcm_symphonyid&$orderby=fullname asc&$filter=statecode eq 0', 
  host: 'xxxxxx.crm.dynamics.com', 
  method: 'GET',
  // 补充你的headers等其他必要配置,比如Authorization
};

方法2:用Node.js内置url模块构建URL(更推荐)

手动拼接URL容易出错,用Node.js自带的url模块可以自动处理参数转义,避免这类问题。代码示例:

const url = require('url');

// 构建完整的请求URL
const requestUrl = url.format({
  protocol: 'https',
  host: 'xxxxxx.crm.dynamics.com',
  pathname: '/api/data/v8.2/contacts',
  query: {
    $select: 'address1_city,address1_line1,address1_line2,address1_line3,contactid,emailaddress1,firstname,fullname,middlename,mobilephone,statecode,suffix,telephone1,vcm_npiid,vcm_prescriberspeciality,vcm_prescriberstatus,vcm_recordtype,vcm_symphonyid',
    $orderby: 'fullname asc',
    $filter: 'statecode eq 0'
  }
});

// 解析成https.request需要的options对象
const options = url.parse(requestUrl);
options.method = 'GET';
// 添加你的请求头,比如Authorization: 'Bearer <your-access-token>'

额外提醒

如果你的查询参数里包含空格、中文或者其他特殊字符(比如$filter里如果有字符串值),url.format会自动帮你做URL编码,比手动处理靠谱多了。

内容的提问来源于stack exchange,提问作者souravlahoti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:28:20