摘要:注意網(wǎng)站中用的所有技術(shù)可以交流學(xué)習(xí)不要以線上環(huán)境運(yùn)行,因?yàn)樵创a中沒有包含相關(guān)文件中的,授權(quán)登陸需要自己配置賬號(hào)密碼只有讀取權(quán)限交流群
前言
線上環(huán)境小包總
技術(shù)棧服務(wù)器: node、koa2
客戶端: vue、vuex、vue-router、Element-UI
數(shù)據(jù)庫(kù): redis、mongodb
打包: webpack
網(wǎng)站模塊
爬蟲模塊:用于爬取一些我看的上的文章,主要采用request,cheerio模塊對(duì)數(shù)據(jù)的爬取和處理,
同時(shí)需要注意處理爬取圖片的處理
文章模塊:展示爬取的文章數(shù)據(jù),并進(jìn)行分類處理和展示
登錄注冊(cè)模塊: 支持用戶的登錄注冊(cè),接入第三方登錄接口,注冊(cè)采用nodemailer模塊進(jìn)行郵箱驗(yàn)證
留言模塊: 讓用戶在本網(wǎng)站留下自己的足記
統(tǒng)計(jì)模塊: 統(tǒng)計(jì)網(wǎng)站訪問量等數(shù)據(jù)
爬蟲模塊segmentfault的文章不用登錄就能查看,所有可用訪問url就能取到文章的內(nèi)容,唯一需要的注意的是請(qǐng)求的圖片鏈接要做特殊的處理,最開始本來(lái)我是用的盜鏈的形式,后面過了一段時(shí)間segmentfault不允許盜鏈了,沒辦法只能從自己網(wǎng)站加載了。
在segmentfault中圖片的src中帶有?,&符號(hào)這中特殊的符號(hào)(應(yīng)該是圖片服務(wù)器的原因),并且也沒有圖片的后綴、所以我在爬取圖片的時(shí)候就需要處理特殊符號(hào),和加后綴 let imgError = false, imgPath = (imgSavePath + src).replace(/?|&/g, "_"); //替換特殊符號(hào) let writeFile = fs.createWriteStream(imgPath), extname; request(_src || (addr + src), {timeout: 60000}).on("response", function(response){ if(response.statusCode.toString().indexOf("4") == 0){ self.remove(); imgError = true; resolve2(); return; } extname = path.extname(response.request.path); //在響應(yīng)頭中獲取文件后綴 if(!extname && response.headers["content-type"].indexOf("image") != -1){ extname = "." + response.headers["content-type"].split("/")[1]; if(extname.indexOf("svg") != -1){ extname = ".svg"; } } let imgSrc = _src ? src : src + extname; self.attr("src", imgSrc); }).on("error", function(err){ writeLog("請(qǐng)求圖片失?。?"+ (_src||src)+ " 來(lái)至url: "+ url, true); self.remove(); imgError = true; reject2(); }).pipe(writeFile); writeFile.on("finish", function(){ if(imgError){ return ; } if(extname){ let imgPath = (imgSavePath + src).replace(/?|&/g, "_"); //添加后綴 if(fs.existsSync(imgPath)){ try{ if(src.indexOf(".") != -1){ resolve2("自帶后綴: "+ src); return; } fs.renameSync(imgPath, imgPath + extname); writeLog("修改圖片: " + imgPath + extname); }catch(e){ writeLog("修圖圖片失敗原因: ."+ src + extname + " " + e, true); } resolve2(imgPath + extname); }else { writeLog("圖片不存在: ."+ src+ " 來(lái)至url: "+ url, true); reject2(url); } } });
文章中的代碼樣式,需要自己用highlight模塊去添加。
然后就是把文章的關(guān)鍵信息,如文件的url,時(shí)間,作者,保存到數(shù)據(jù)庫(kù),把文章的真正的html保存為一個(gè)文件,然后根據(jù)url去加載本地的html。
網(wǎng)站中用的所有技術(shù)可以交流學(xué)習(xí)
不要以線上環(huán)境運(yùn)行,因?yàn)樵创a中沒有包含https相關(guān)文件
config.js中的github,qq授權(quán)登陸需要自己配置
mongodb賬號(hào)密碼只有讀取權(quán)限
QQ交流群133240225、 193572405
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/112463.html
摘要:注意網(wǎng)站中用的所有技術(shù)可以交流學(xué)習(xí)不要以線上環(huán)境運(yùn)行,因?yàn)樵创a中沒有包含相關(guān)文件中的,授權(quán)登陸需要自己配置賬號(hào)密碼只有讀取權(quán)限交流群 前言 線上環(huán)境小包總 showImg(https://segmentfault.com/img/bVTvhf?w=1297&h=763); 技術(shù)棧 服務(wù)器: node、koa2 客戶端: vue、vuex、vue-router、Element-UI 數(shù)...
摘要:本來(lái)不想推的,看到上有個(gè)項(xiàng)目很簡(jiǎn)單,都有,推推看咯。雖然這個(gè)項(xiàng)目很簡(jiǎn)單,但是還蠻有趣,用來(lái)入門和以及再好不過了。 本來(lái)不想推的,看到github上有個(gè)項(xiàng)目很簡(jiǎn)單,都有300 star,推推看咯。雖然這個(gè)項(xiàng)目很簡(jiǎn)單,但是還蠻有趣,用來(lái)入門vue2和nodejs以及mongodb再好不過了。 等這幾天把公司手頭的事情忙完,再把vuex的部分強(qiáng)化下。 基于vue2/vuex/vue-rout...
摘要:?jiǎn)?dòng)和停止設(shè)置開機(jī)自啟配置阿里云服務(wù)器端口此項(xiàng)不是必須,本地連接遠(yuǎn)程數(shù)據(jù)庫(kù)調(diào)試查看方便些就開啟由于只開啟了一些基礎(chǔ)端口如,其他都關(guān)閉,要自己配置。 寫在前面 文章有丟丟長(zhǎng),前端開發(fā)第一次部署項(xiàng)目,有問題請(qǐng)及時(shí)提出,以免誤導(dǎo)其他童鞋,輕拍~, 更新系統(tǒng) sudo yum update 安裝mongo 1. 添加MongoDB源 在/etc/yum.repos.d/下創(chuàng)建名為mongodb...
閱讀 3914·2021-09-10 11:22
閱讀 2385·2021-09-03 10:30
閱讀 3699·2019-08-30 15:55
閱讀 1970·2019-08-30 15:44
閱讀 870·2019-08-30 15:44
閱讀 620·2019-08-30 14:04
閱讀 3079·2019-08-29 17:18
閱讀 1300·2019-08-29 15:04