执法局网站建设目的,优化关键词具体要怎么做,中山网站设计外包,wordpress 又拍云加速#前戏 上一周是我到现公司来最忙碌的#xff08;最有意思的#xff09;一周了#xff0c;为什么这么说呢#xff1f;因为项目中需要提供服务端对用户病人信息的一个汇总并以email的形式分享信息的接口#xff0c;在几天的时间里调研处理一套实施方案。我们服务端是Node.js…#前戏 上一周是我到现公司来最忙碌的最有意思的一周了为什么这么说呢因为项目中需要提供服务端对用户病人信息的一个汇总并以email的形式分享信息的接口在几天的时间里调研处理一套实施方案。我们服务端是Node.js实现的其中的npm中有很多丰富的第三方库来解放你重新造轮子的尴尬 ###配方 pug-html-pdf-pdf2png-s3-sendgrid #pug 中在phantom中字体无效的解决方案 在开发pug时遇到一个比较棘手的问题设计定的字体在浏览器上是有效果的但是通过Phantom.js服务器端的 JavaScript API 的 WebKit进行网页截图时字体却都使用了默认字体后来只有通过自定义字体文件才解决这个问题。 style.font-face {font-family: CustomFont;src: url(./views/fonts/HelveticaNeue.otf);}.gender {display: inline;color: rgb(102, 102, 102);font-family: CustomFont;}
复制代码嗯模板文件算是搞定了接下来就是具体代码的实现了。 准备数据材料 要做某件事情肯定都会先把需要的材料先搞到手把感觉编程和现实生活中解决问题的思路很多都是想通的 我是受到某人的启发说通过一个汇总链表查询把N张表的数据都通过一个查询搞出来最后把它变成View也方便服务端的开发我这么一听感觉是很有道理啊那就做吧我感觉我执行力好强☺ 在我们的系统有些表的设置是字段可以方便增加字段类型但在查询时就必须要考虑行转列或是列转行这在我之前都是未知领域 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_typemobile then contacts.value end) as mobilesfrom contacts where contacts.is_deleted 0 group by patient_id
复制代码 max(IF(contact_type email,value,null) 可以将列中符合contact_typeemail 的提出来单独作为一列group_concat(case when contact_typemobile then contacts.value end) 则可以将多个类型的通过拼接放在一个单元格中。不过最后遇到一个问题就是无法将多个mobile很好的区分出来。所以只好老实的在Node.js中分批的查询其中的数据。放一张截图肯定能体会出我心中N多的XX马留意下文件名 ###分批次取数据 先讲解下前提customDiagnoses和patientDiagnoses表是1-N的关系。 const customDiagnoses await Promise.all(patientDiagnoses.map(item CustomDiagnosis.findById(item.sourceId))
)
复制代码 Promise.all()是需要等待其中的所有的方法都完全处理完后再执行后面的语句 这里可以补充一个《如何把一个异步的方法搞成一个看似同步的方法》 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顾名思义就是当你达成某种成就了我就会帮你干某件事。 写一个Promise最有变化就是对callback的处理其他的基本都跟这个差不多使用Promise也很简单直接在调用的地方前面加上一个await即可。 有人会问了为什么要写Promise啊Node.js 不是都是有callback的吗干嘛还要我多次一举 起始也不完全都要把异步方法用Promise封装起来但是if 你的一个方法中有N个异步的 根据上一个方法的结果来干下一件事 { 那么你的代码就会变成一个阶梯状一层嵌套一层不移维护也不易阅读 } 最后附上我心情劳动后上天也被感动给力我一个超可爱的喵星人也要感谢在开发过程支持和帮助我的某某人 下部预告《测试达人带飞让你装逼让你吹》