更新於 2019-01-02node
利用 eggjs 重構了下此項目,有興趣的能夠參考看看,傳送門git
首先感謝做者的分享,很贊~,原文地址github
這裏記錄下編碼遇到的問題,這裏只針對 sever
進行了驗證。有一樣遇到問題的童鞋,能夠做爲參照~mongodb
本地環境:npm
問題一(mongoose
相關)segmentfault
問題描述:DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.
mongoose
解決方案:ide
mongoose.connect(config.dbUri, { useCreateIndex: true, useNewUrlParser: true }) 或者 mongoose.set('useCreateIndex', true) mongoose.connect(config.dbUri, { useNewUrlParser: true })
對應的源碼文件 kendou-book/book-server/server/database/init.js
,涉及修改的代碼以下:post
... + var opts = { + useCreateIndex: true, + useNewUrlParser: true + }; - mongoose.connect(db); + mongoose.connect(db, opts);
問題描述:DeprecationWarning: collection.count is deprecated
編碼
解決方案:
底層的mongodb驅動程序已棄用.count()方法。您應該使用.estimatedDocumentCount()或.countDocuments()代替。
對應的源碼文件 kendou-book/book-server/server/tasks/runninng.js
,涉及修改的代碼以下:
... // 激活爬數據 爲下一次服務 await taskBook(item.bookId) let count = await Chapter.find({ bookId: item.bookId - }).count() + }).countDocuments()
問題二(puppetter 相關
)
問題描述:ERROR: Failed to download Chromium r588429! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
解決方案:
vi .npmrc type puppeteer_download_host = https://npm.taobao.org/mirrors yarn add puppeteer -D or npm i puppeteer --save-dev
問題描述:(node:19996) UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded
解決方案:
對應的源碼文件 kendou-book/book-server/server/crawler/book.js
,涉及修改的代碼以下:
... console.log('bookkkk:', browser) const page = await browser.newPage() await page.goto(url, { waitUntil: 'networkidle2', + timeout: 3000000 })
對應的源碼文件 kendou-book/book-server/server/crawler/chapter.js
,涉及修改的代碼以下:
... const page = await browser.newPage() await page.goto(url, { waitUntil: 'networkidle2', + timeout: 3000000 })
問題三(源碼瑕疵
)
問題描述:定義 book 的 schema 的時候,字段(author)拼寫錯誤
解決方案:
對應的源碼文件 kendou-book/book-server/server/database/schema/book.js
,涉及修改的代碼以下:
... - auhtor: { type: String }, + author: { type: String },
對應的源碼文件 kendou-book/book-server/server/crawler/book.js
,涉及修改的代碼以下:
... let result = await page.evaluate(() => { return { headImg: document.querySelector('.story_cover_m62topxs img').getAttribute('src'), name: document.querySelector('.info_left_m62topxs h1').innerText, - auhtor: document.querySelector('.info_left_m62topxs h2 a').innerText, + auhtor: document.querySelector('.info_left_m62topxs h2 a').innerText, chapterNum: document.querySelectorAll('.cp_dd_m62topxs').length } })
參考連接: