[尝试从下面的链接获取html时出现以下错误:
无法获取页面:{FetchError:请求https://www1.nseindia.com/marketinfo/companyTracker/compInfo.jsp?symbol=TCS&series=EQ失败,原因:读取ECONNRESET在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}
。
据我所知,您不能在NodeJS中使用fetch
。您需要依靠不同的方法。我个人通常使用Axios。
还检查代码的这一部分是否确实返回了一个承诺:
return response.text()
链接另一个.then
之前。
我将使用一些基于现代的promise的软件包来完成这项工作。其中一些是got
,axios
等。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);
});