在Node.js中获取URL时出现ECONNRESET错误。

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

无法获取页面:{FetchError:请求 https://www1.nseindia.com/marketinfo/companyTracker/compInfo.jsp?symbol=TCS&series=EQ 失败,原因:read ECONNRESET at ClientRequest

我正在使用以下代码片段:
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在线编辑器中尝试了这个代码片段,它返回Promise {pending}

2个回答

0

我会使用一些现代的基于 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);
  });


-5
据我所知,您不能在NodeJS中使用fetch。您需要依赖不同的方法。我个人通常使用Axios。
还要检查代码的这一部分是否实际返回一个Promise:
return response.text()

在链接另一个 .then 之前。

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


实际上,.text() 是一个 jQuery 方法,你是如何在后端使用它的? - Mattia Rasulo
关于链接 - response.text()返回一个Promise。我正在使用npm 链接来使用fetch。 - JA007
哦,我明白了!这很重要,请在你的问题中加上它!:) - Mattia Rasulo
1
实际上,它最初是可以工作的。但现在我收到了这个错误。 - JA007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接