【问题标题】:TypeError: Request path contains unescaped characters NodeJS + DynamicsTypeError:请求路径包含非转义字符NodeJS + Dynamics
【发布时间】:2018-04-17 20:06:33
【问题描述】:

我正在向 Dynamics CRM 发出 https.request 以获取节点 js 中联系人的数据。

下面是我的代码:

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: 'Bearer xxxxxxx',
     Accept: 'application/json',
     'Content-Type': 'application/json; charset=utf-8',
     Prefer: 'odata.includeannotations=OData.Community.Display.V1.FormattedValue',
     'OData-MaxVersion': '4.0',
     'OData-Version': '4.0' 
   } 
} 

var crmrequest = https.request(options, function(response) { ... }

我收到此错误:

TypeError: 请求路径包含非转义字符

当我尝试在 asc 和 eq 0 查询之间没有空格时[通过删除它]。有用。 任何解决方法

【问题讨论】:

    标签: node.js https dynamics-crm node-request


    【解决方案1】:

    您必须使用querystring.stringifyencodeURI 来转义特殊字符。

    const querystring = require('querystring');
    const path = '/api/data/v8.2/contacts';
    const qs = {
        $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'
    }
    
    const options = { 
      path: path + '?' + querystring.stringify(qs),
      host: 'xxxxxx.crm.dynamics.com',
      method: 'GET'
      /* ... */
    }
    

    const path = '/api/data/v8.2/contacts';
    const 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';
    
    
    const options = { 
      path: path + '?' + encodeURI(query),
      host: 'xxxxxx.crm.dynamics.com',
      method: 'GET'
      /* ... */
    }
    

    【讨论】:

    • 对我来说,第一个选项完美无缺。另一个没试过
    • 它有效,但我认为第一个是要走的路。很高兴它有帮助!
    猜你喜欢
    • 2019-05-30
    • 2018-07-05
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多