node搭建本地服务器,接受post请求,返回爬虫爬取的数据,log上都显示成功,但是前端接到的数据是catch中的数据。
用node搭建了一个本地服务器,主要的功能是,接受Post请求,然后去sf上面爬数据返回,显示的情况是,在cmd里面打印出来,显示的是爬取成功,但是前台接到的确实catch中的error2。
下面是代码。
let http = require("http");
let url = require("url"); //解析get请求
let query = require("querystring"); //post请求相关
// let creep = require('./creep');
http.createServer(function(request,response){
//post
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader(
"Access-Control-Allow-Methods",
"PUT, GET, POST, DELETE, HEAD, PATCH"
);
// var params = url.parse(request.url,true);
let postData = "";
request.addListener("data",function(chunk){
postData += chunk;
});
//end 表示全部body接受完毕
request.addListener("end",function(){
creepDataForUrl().then(function(creepRes){
response.end(creepRes);
},function(e){
console.log("fail");
}).catch(function(e){
console.log("error:" +JSON.stringify(e));
})
});
}).listen(8011);
const https = require('https');
const cheerio = require('cheerio');
function creepDataForUrl(){
return new Promise(function(resolve,rej){
https.get('https://segmentfault.com', (res) => {
var data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
let temp = getDataFromHtml(data);
console.log(temp.length);
resolve(temp);
})
}).on('error', (e) => {
console.log("这里出错了:" + JSON.stringify(e));
rej && rej(e);
});
});
}
function getDataFromHtml(htmlData){
let $ = cheerio.load(htmlData);
let items = $("div.news-item.stream__item.clearfix");
let resAry=[];
items.each(function(index,item){
let el = $(item);
resAry.push({
title:el.find(".news__item-info a").first().text(),
});
});
return resAry;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
ok,问题我找到了,在确实在catch里捕获了一个错误,使用JSON.stringify是看不到内容的(这个我不知道为什么,有可能js的error对象里面的属性是不可枚举的?),我直接打印e.message,得到的提示是:first argument must be a string or buffer. 我在success里面第一个参数时数组,所以才会进入catch,改成.tostring之后就可以了。