利用node的http模块可以快速搭建一个简易的web服务器,当我们需要快速地构建一些数据接口服务时,这非常有用。那当然如果要用node来搭建web网站的话,建议使用http2模块。毕竟http模块只能支持http1.1。
const cheerio = require('cheerio');
const request = require('request');
const fs = require('fs');
const os = require('os');
const http = require('http');
const url = require('url');
const server = http.createServer((req, res) => {
var info = url.parse(req.url);
if (info.path === '/') {
fetchLinks(res);
} else {
res.writeHead(404);
res.end();
}
});
server.on('clientError', (err, socket) => {
socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
});
server.listen(8000);
function fetchLinks(response){
request('https://www.xxxx.com/sitemap', (err, resp, html) => {
if (err) {
println('Error occurred:' + ele);
return console.error(err);
}
//return;
var $ = cheerio.load(html);
var tagAList = $('td a');
var targetFile = './links.txt';
fs.exitsSync(targetFile) && fs.unlinkSync(targetFile);
tagAList.each(function (idx){
var href = tagAList[idx].attribs['href'];
println(href);
fs.writeFileSync(targetFile, href + os.EOL, {flag:'a'});
});
response.setHeader('Content-Type', 'application/json');
response.setHeader('X-Powerby', 'nodejs');
response.writeHead(200, { 'Content-Type': 'application/json' });
var content = fs.readFileSync(targetFile, 'utf8');//if no 'utf8', Buffer would be returned.
response.write(JSON.stringify(content.split(os.EOL)));
response.end();
});
}
function println(msg){
console.log(msg);
}