Node.js開發(fā)中的那些旮旮角角 第一部

前戲

上一周是我到現(xiàn)公司來最忙碌的(最有意思的)一周了备恤,為什么這么說呢诬烹?因?yàn)轫?xiàng)目中需要提供服務(wù)端對(duì)用戶病人信息的一個(gè)匯總并以email的形式分享信息的接口溪胶,在幾天的時(shí)間里調(diào)研處理一套實(shí)施方案阔拳。我們服務(wù)端是Node.js實(shí)現(xiàn)的(其中的npm中有很多豐富的第三方庫來解放你重新造輪子的尷尬)

配方

pug->html-pdf->pdf2png->s3->sendgrid

pug 中在phantom中字體無效的解決方案

在開發(fā)pug時(shí)遇到一個(gè)比較棘手的問題壶唤,設(shè)計(jì)定的字體在瀏覽器上是有效果的嘁傀,但是通過Phantom.js(服務(wù)器端的 JavaScript API 的 WebKit)進(jìn)行網(wǎng)頁截圖時(shí),字體卻都使用了默認(rèn)字體视粮,后來只有通過自定義字體文件才解決這個(gè)問題。

style.
        @font-face {
            font-family: CustomFont;
            src: url('./views/fonts/HelveticaNeue.otf');
        }


        .gender {
            display: inline;
            color: rgb(102, 102, 102);
            font-family: CustomFont;
        }

嗯橙凳,模板文件算是搞定了蕾殴,接下來就是具體代碼的實(shí)現(xiàn)了笑撞。

準(zhǔn)備數(shù)據(jù)材料

要做某件事情肯定都會(huì)先把需要的材料先搞到手把!(感覺編程和現(xiàn)實(shí)生活中解決問題的思路很多都是想通的)

我是受到某人的啟發(fā)說通過一個(gè)匯總鏈表查詢钓觉,把N張表的數(shù)據(jù)都通過一個(gè)查詢搞出來茴肥,最后把它變成View,也方便服務(wù)端的開發(fā)荡灾,我這么一聽感覺是很有道理啊瓤狐,那就做吧(我感覺我執(zhí)行力好強(qiáng)?)

在我們的系統(tǒng)有些表的設(shè)置是字段可以方便增加字段類型,但在查詢時(shí)就必須要考慮行轉(zhuǎn)列批幌,或是列轉(zhuǎn)行(這在我之前都是未知領(lǐng)域)

select patient_id, max(IF(contact_type = 'email',value,null)) as 'email', max(IF(contact_type = 'address',value,null)) as 'address', group_concat(case when contact_type='mobile' then contacts.value end) as 'mobiles'
  from contacts where contacts.is_deleted = 0 group by patient_id

max(IF(contact_type = 'email',value,null) 可以將列中符合contact_type='email' 的提出來單獨(dú)作為一列础锐;group_concat(case when contact_type='mobile' then contacts.value end) 則可以將多個(gè)類型的通過拼接放在一個(gè)單元格中。不過最后遇到一個(gè)問題荧缘,就是無法將多個(gè)mobile很好的區(qū)分出來皆警。所以只好老實(shí)的在Node.js中分批的查詢其中的數(shù)據(jù)。放一張截圖截粗,肯定能體會(huì)出我心中N多的XX馬(留意下文件名)

Paste_Image.png

分批次取數(shù)據(jù)

先講解下前提信姓,customDiagnoses和patientDiagnoses表是1->N的關(guān)系。

const customDiagnoses = await Promise.all(
            patientDiagnoses.map(item =>
                CustomDiagnosis.findById(item.sourceId)
            )
)

Promise.all()是需要等待其中的所有的方法都完全處理完后再執(zhí)行后面的語句

這里可以補(bǔ)充一個(gè)《如何把一個(gè)異步的方法搞成一個(gè)看似同步的方法》

    static async exportPDF(html, options, filePath) {
        const promise = new Promise((reslove, reject) => {
            const callback = (err, res) => {
                if (err) {
                    reject(err)
                    return
                }
                reslove(res)
            }
            pdf.create(html, options).toFile(filePath, callback)
        })
        return promise
    }

Promise顧名思義就是當(dāng)你達(dá)成某種成就了绸罗,我就會(huì)幫你干某件事意推。
寫一個(gè)Promise最有變化就是對(duì)callback的處理,其他的基本都跟這個(gè)差不多珊蟀,使用Promise也很簡單菊值,直接在調(diào)用的地方前面加上一個(gè)await即可。

有人會(huì)問了為什么要寫Promise跋德濉俊性?Node.js 不是都是有callback的嗎?干嘛還要我多次一舉描扯?

起始也不完全都要把異步方法用Promise封裝起來定页,但是if 你的一個(gè)方法中有N個(gè)異步的 && 根據(jù)上一個(gè)方法的結(jié)果來干下一件事 {
那么你的代碼就會(huì)變成一個(gè)階梯狀,一層嵌套一層绽诚,不移維護(hù)也不易閱讀
}

最后附上典徊,我心情勞動(dòng)后,上天也被感動(dòng)恩够,給力我一個(gè)超可愛的喵星人卒落,也要感謝在開發(fā)過程支持和幫助我的某某人!7渫啊儡毕!

![IMG_0395.JPG](http://upload-images.jianshu.io/upload_images/1530185-d6cb759bb8687d07.JPG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

下部預(yù)告,《測試達(dá)人帶飛,讓你裝逼讓你吹》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腰湾,一起剝皮案震驚了整個(gè)濱河市雷恃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌费坊,老刑警劉巖倒槐,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異附井,居然都是意外死亡讨越,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門永毅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來把跨,“玉大人,你說我怎么就攤上這事卷雕〗谠常” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵漫雕,是天一觀的道長滨嘱。 經(jīng)常有香客問我,道長浸间,這世上最難降的妖魔是什么太雨? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮魁蒜,結(jié)果婚禮上囊扳,老公的妹妹穿的比我還像新娘。我一直安慰自己兜看,他們只是感情好锥咸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著细移,像睡著了一般搏予。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弧轧,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天雪侥,我揣著相機(jī)與錄音,去河邊找鬼精绎。 笑死速缨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的代乃。 我是一名探鬼主播旬牲,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了引谜?” 一聲冷哼從身側(cè)響起牍陌,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎员咽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贮预,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贝室,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仿吞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滑频。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖唤冈,靈堂內(nèi)的尸體忽然破棺而出峡迷,到底是詐尸還是另有隱情,我是刑警寧澤你虹,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布绘搞,位于F島的核電站,受9級(jí)特大地震影響傅物,放射性物質(zhì)發(fā)生泄漏夯辖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一董饰、第九天 我趴在偏房一處隱蔽的房頂上張望蒿褂。 院中可真熱鬧,春花似錦卒暂、人聲如沸啄栓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昙楚。三九已至,卻和暖如春齿坷,著一層夾襖步出監(jiān)牢的瞬間桂肌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工永淌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崎场,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓遂蛀,卻偏偏與公主長得像谭跨,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容