鍍金池/ 問答/HTML/ 大佬們,如何解決form.parse跟ctx.body的問題

大佬們,如何解決form.parse跟ctx.body的問題

大佬們,目前我要實(shí)現(xiàn)的功能大體是一個(gè)圖片上傳功能。
而這么一個(gè)小功能對于一只菜雞來說,太多難點(diǎn)了,望各位大佬指點(diǎn)

大體結(jié)構(gòu):
前端vue,后端koa
項(xiàng)目分為兩個(gè)系統(tǒng),為了確保一些資源能夠一起用,所以有一個(gè)文件夾attachment是跟這兩個(gè)系統(tǒng)的文件夾是同級的。

主要問題:
1.由于上傳功能是用戶提供的裁剪過的圖片,所以是以base64+formData的方式傳輸?shù)胶笈_。然后用form.parse來獲取到base64 并轉(zhuǎn)為二進(jìn)制,再用fs.writeFileSync寫入文件。
遇到的問題是:
(1)form.parse是異步執(zhí)行的。所以比fs.writeFileSync后執(zhí)行,那么就會寫入一個(gè)空的文件。加了async跟await也沒有用。
(2)如果將fs.writeFileSync寫到form.parse里的話。ctx.body又會直接執(zhí)行(而我的ctx.body里放的是圖片的路徑已經(jīng)保存成功與否的狀態(tài)),不會等form.parse執(zhí)行完畢,那么無法將路徑啥的返回給前端。
(3)動(dòng)態(tài)生成的圖片路徑,前后端應(yīng)該如何寫才能使圖片正確加載。

圖片描述

回答
編輯回答
若相惜

await對回調(diào)函數(shù)是沒有用的??梢詷?gòu)造一個(gè)Promise。
`await new Promise((resolve,reject)=>{
form.parse(ctx,req,function(err,fields,files){

//parse過程
//如果成功就resolve,失敗就reject
})

});
`
async-await的作用是讓回調(diào)函數(shù)寫成同步的形式,也就是說它可以看做一堆的callback不過是寫法比較好看。

2017年4月30日 19:39
編輯回答
哎呦喂

直接ctx.body = result不就可以了為什么還要包一下,樓上已經(jīng)給答案了,還有你那個(gè)寫入函數(shù)也需要包一下,很明顯你要看一下promise或者async/await怎么用

2017年6月23日 18:13