蕪湖不蕪
2019-03-21 22:13:02
想要實(shí)現(xiàn)的的業(yè)務(wù)是先渲染頁(yè)面,然后通過(guò)ctx.body往頁(yè)面中加內(nèi)容核心代碼如下await ctx.render('crawler', { title: '爬取頁(yè)面', content: `<h2>開始爬取</h2> <h4>創(chuàng)建地址池成功!</h4>`})const linkPool = createLinkPool()for (let i = 0; i < linkPool.length; ++i) { const html = await requestPage(linkPool[i]) let builds = await dataHandler(html) let arr = []; const sql = 'insert into buildinfo(id,name,area,address,average,price,description,type) values ?' //let rows = await query(sql, [builds]) try { let rows = await query(sql, [builds]) ctx.body += `爬取地址${linkPool[i]}的${rows.affectedRows}條數(shù)據(jù)已經(jīng)入庫(kù)` } catch (error) { ctx.body += `${linkPool[i]}的爬取寫入操作失敗了!失敗原因:${error}` }}現(xiàn)在的問(wèn)題是只有當(dāng)所有寫數(shù)據(jù)庫(kù)的操作結(jié)束,頁(yè)面才會(huì)展示,否則一直在讀小圓圈,請(qǐng)問(wèn)怎么才能達(dá)到我所預(yù)期的效果我將渲染頁(yè)面之后的操作放到一個(gè)中間件中了,代碼如下router.get('/crawler/', async (ctx, next) => { await ctx.render('crawler', { title: '爬取頁(yè)面', content: `<h2>開始爬取</h2> <h4>創(chuàng)建地址池成功!</h4>` }) next()})頁(yè)面渲染之后也確實(shí)執(zhí)行了入庫(kù)操作的邏輯,但是ctx.body += `爬取地址${linkPool[i]}的${rows.affectedRows}條數(shù)據(jù)已經(jīng)入庫(kù)`這個(gè)操作并沒(méi)有往頁(yè)面上寫內(nèi)容,是不是我的用法不對(duì),請(qǐng)問(wèn)ctx.body是干什么的?
3 回答

繁星coding
TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊
你都await query
了當(dāng)然是讀完再返回。
如果你需要先渲染一遍,再填充數(shù)據(jù),只能在前端寫腳本訪問(wèn)后端接口,因?yàn)?code>http不能主動(dòng)寫數(shù)據(jù)。

慕村225694
TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
你的這個(gè)需求,最好的方法就是前后端分離
前端有個(gè)靜態(tài)頁(yè)面,然后請(qǐng)求后臺(tái)的接口數(shù)據(jù)填充頁(yè)面就可以了
ctx.body
方法 是往前端返回?cái)?shù)據(jù)相當(dāng)于response.body
的內(nèi)容

Helenr
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
添加回答
舉報(bào)
0/150
提交
取消