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

使用sp-request从SharePoint获取文件详情返回ECONNREFUSED错误

问题根因

你的错误由两个核心逻辑问题导致,和@FileUrl参数写法无关:

  1. sp-request 初始化时未指定目标站点地址,导致请求被错误路由到本地127.0.0.1,触发连接拒绝错误
  2. 异步执行逻辑顺序错误,文件校验请求还未完成就提前终止了Promise

修复方案

1. 修正sp-request初始化参数

调用sprequest.create时必须传入site参数,值为你的SharePoint站点根地址,否则sp-request无法识别请求目标,默认会向本地发起请求,这就是报错里connect ECONNREFUSED 127.0.0.1:443的直接原因。

2. 删除多余的resolve调用

你在spr.get请求发出后直接执行了resolve(),会直接把当前Promise标记为完成,完全不会等待接口返回校验结果。

3. 可选优化:@FileUrl参数放到query配置

可以避免手动拼接URL的转义问题,写法更稳妥。


修复后代码片段

const sprequest = require('sp-request');

await new Promise((resolve, reject) => {
      gulp
      .src(folderLocation)
      .pipe(
        spsync({
          username: uname,
          password: pwd,
          site: siteCatalogUrl + "/",
          libraryPath: catalogName,
          publish: true,
          verbose: true
        }))
      .on("finish", () => {
          // 修复1:初始化传入site参数
          var spr = sprequest.create({ 
            username: uname, 
            password: pwd,
            site: siteCatalogUrl
          });
          
          var fileRelativeUrl = "/sites/JJTest/AppCatalog/test.sppkg";
          var filepath = `${siteCatalogUrl}/_api/web/GetFileByServerRelativeUrl(@FileUrl)/$value`;
          console.log('trying to retrieve: ' + filepath);
          
          spr.get(filepath, {
            encoding: null,
            // 优化:query参数单独配置,自动处理转义
            query: {
              '@FileUrl': `'${fileRelativeUrl}'`
            }
          })
          .then(data => {
              expect(fileContent.equals(data.body)).is.true;
              resolve();
          })
          .catch(err => {
            console.log('errored out')
            console.log(err)
            reject(err);
          });
          // 修复2:删掉此处多余的resolve()
      });  
  }); 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:24:03