【问题标题】:ECONNRESET error while fetching an URL in node.js在 node.js 中获取 URL 时出现 ECONNRESET 错误
【发布时间】:2020-01-04 13:18:03
【问题描述】:

尝试从以下链接获取(使用 npm node-fetch)html 时出现以下错误:

获取页面失败:{ FetchError: 请求 https://www1.nseindia.com/marketinfo/companyTracker/compInfo.jsp?symbol=TCS&series=EQ 失败,原因:读取 ECONNRESET 在客户端请求

我正在使用以下 sn-p :

const DomParser = require("dom-parser");
const parser = new DomParser();
const fetch = require("node-fetch");

router.get("/info", (req, res, next) => {
  var url =
    "https://www1.nseindia.com/marketinfo/companyTracker/compInfo.jsp?symbol=TCS&series=EQ";
  fetch(url)
    .then(function(response) {
      // When the page is loaded convert it to text
      return response.text();
    })
    .then(function(html) {
      // Initialize the DOM parser

      // Parse the text
      var doc = parser.parseFromString(html, "text/html");

      // You can now even select part of that html as you would in the regular DOM
      // Example:
      // var docArticle = doc.querySelector('article').innerHTML;

      console.log(doc);
    })
    .catch(function(err) {
      console.log("Failed to fetch page: ", err);
    });
});

在显示错误之前,响应被控制台记录了几次,现在每次我调用 /info 时都会抛出错误。

我已经在 repl 在线编辑器中尝试了 sn-p。它返回Promise {pending}

【问题讨论】:

    标签: node.js express dom fetch


    【解决方案1】:

    我会使用一些现代的基于 Promise 的包来完成这项工作。有些是gotaxios 等。node-fetch 最后一次发布是在 8 个月前。它可能无法处理编码或压缩。

    这是一个使用 axios 的示例。

    const axios = require("axios");
    const DomParser = require("dom-parser");
    const parser = new DomParser();
    
    var url =
      "https://www1.nseindia.com/marketinfo/companyTracker/compInfo.jsp?symbol=TCS&series=EQ";
    axios(url)
      .then(response => response.data)
      .then(html => {
        // Initialize the DOM parser
    
        // Parse the text
        var doc = parser.parseFromString(html, "text/html");
    
        // You can now even select part of that html as you would in the regular DOM
        // Example:
        // var docArticle = doc.querySelector('article').innerHTML;
    
        console.log(doc);
      })
      .catch(function(err) {
        console.log("Failed to fetch page: ", err);
      });
    
    

    【讨论】:

      【解决方案2】:

      据我所知,您不能在 NodeJS 中使用 fetch。你需要依靠不同的方法。我个人通常使用 Axios。

      还要检查这部分代码是否真的返回了一个承诺:

      return response.text()
      

      在链接另一个 .then 之前。

      https://www.valentinog.com/blog/http-js/

      【讨论】:

      • 其实 .text() 是一个 jQuery 方法,你是怎么在后端使用这个的?
      • 引用link- response.text() 返回承诺。我正在使用 npm link 来使用 fetch。
      • 哦,好的,我明白了!这会有所不同,请在您的问题中添加它! :)
      • 事实上,它最初是有效的。但现在我得到了这个错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 2014-01-24
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多