一篇文章我給大家說明了如何從零開始搭建一個node的服務端框架,我們用到了Egg框架。Egg框架我不再過多介紹,如果有小伙伴想了解,可以回去看我以前寫的文章,會有相關的介紹。這次我將在上次搭建的框架上進行延伸,講一下如果用Egg框架連接數據庫,并且實現對數據的增刪查改。接下來我們直接進入主題。
我本次選用的數據庫是MySQL。所以我們安裝Egg官方的數據庫插件即可,首先我們安裝插件 egg-mysql 。我們在項目根目錄打開命令提示符,輸入命令行:npm i --save egg-mysql 。回車等待插件下載安裝完成。
npm i --save egg-mysql
命令行下載安裝插件完成后,我們下一步的工作就是在項目中開啟并配置egg-mysql插件。具體操作如下:
首先我們要在項目中開啟數據庫。找到項目中的/config/plugin.js文件我們需要在里面添加幾行代碼,如下所示。
//開啟數據庫插件
mysql : {
enable: true,
package: 'egg-mysql',
}
然后我們還要在 config/config.default.js 中配置各個環境的數據庫連接信息。具體配置如下。
//添加數據庫連接信息
config.mysql = {
// 單數據庫信息配置
client: {
// host
host: 'localhost',
// 端口號
port: '3306',
// 用戶名
user: 'root',
// 密碼
password: '123456',
// 數據庫名
database: 'testdb',
},
// 是否加載到 app 上,默認開啟
app: true,
// 是否加載到 agent 上,默認關閉
agent: false,
};
到此步驟我們的數據庫插件已經安裝完成并且配置好了。那我們怎么實現數據的增刪查改呢?大家請繼續往下看。
首先我們看一下怎么新增數據。我們在mysql的testdb實例中新建一個user空表。如下圖所示。
我們的egg框架也遵循MVC的架構所以我們一般會在service層里面寫我們邏輯處理的代碼,而controller層則是獲取前端數據,回傳數據的控制層。所以我們操作數據庫的代碼是寫在service文件夾里面的。
我們在app/service文件夾里面新建一個user.js文件。在里面寫個新增用戶的方法,該方法就是把數據存到數據庫中。具體代碼如下。
const Service = require('egg').Service;
class UserService extends Service {
//新增用戶data是有controller層傳遞過來的數據記錄。
async addUser(data) {
const {ctx, app} = this;
let result = {};
try {
data.id = 0;//定義id=0,因為數據庫已經設置id為主鍵,并且自增。所以只需要賦值0即可。
// 在 user 表中,插入前端提交上來的數據記錄
const info = await app.mysql.insert('user', data);
//插入成功后。
if(info.affectedRows === 1){
//給前端返回一個Json的對象
result = {
state: 0, //自定義的狀態碼
msg: "添加成功", //返回的消息
data: info.insertId, //新增的記錄的id
}
}
} catch (err) {
//插入數據失敗的返回結果
result = {
state: 1,
msg: err,
data: null,
}
}
return result
}
};
module.exports = UserService;
然后我們在app/controller文件夾里新建一個user.js文件。在這里我們需要獲取前端提交上來的數據,并且將數據處理的結果返回給前端。具體代碼如下。
'use strict';
const Controller = require('egg').Controller;
/**
* @Controller 用戶管理
*/
class UserController extends Controller {
/**
* @summary 新增用戶
* @router post /user/add
* @request body userAddRequest
* @response 200
*/
async addUser() {
const { ctx } = this;
//通過ctx.request.body的方式,可以獲取到前端post方式提交上來的數據
const data = ctx.request.body;
//調用service層的addUser方法。并且返回相應的結果
const userInfo = await ctx.service.user.addUser(data);
//向前端接口響應數據。
ctx.body = userInfo;
}
}
module.exports = UserController;
最后我們定義一個路由,讓前端請求訪問此路由。框架會監聽路由是否被訪問,如果被訪問了則會調用我們定義在controller層的新增用戶的方法。我們在app/router.js文件中添加如下代碼,即可完成路由的定義。
//新增用戶路由
router.post('/user/add', controller.user.addUser);
完成這步驟后,我們一個新增用戶的功能就已經完成了。接下里我們就測試一下它的實際效果。我們運行命令:npm run dev。啟動項目,然后打開網頁http://127.0.0.1:7001,可以直接在swagger-ui.html頁面中進行測試。結果如下圖所示。
經過測試,數據已經添加完成。所以數據庫連接也是正常的。
本次分享暫時先告一段落。請各位小伙伴抬起你們發財的小手,點個贊唄。下次我將會進行和大家分享對數據查改刪的方法。關注我!!!更多精彩分享不迷路。
ompdf是一個可以將HTML生成PD并保留樣式效果的PHP第三方擴展。
下面就一步步講解如何使用:
一、通過composer安裝
composer require dompdf/dompdf
安裝過程
二 、編寫測試代碼
(1)引用autoload.php
include 'vendor/autoload.php';
(2)實例化Dompdf
$dompdf=new \Dompdf\Dompdf();
(3)加載HTML
$dompdf->loadHtml($html); //$html 為HTML字符串
(4)設置紙張和方向
$dompdf->setPaper('A4', 'landscape'); //紙張大小和紙張方向
(5)生成PDF并下載
$dompdf->render();
$dompdf->stream('數據字典.pdf');
三、導出PDF測試,發現中文亂碼了
導出PDF發現中文亂碼了
四、解決中文亂了問題
(1)下載支持中文的字體包放到根目錄下(和vendor目錄同級),這里演示使用的是阿里巴巴的普惠字體(字體格式是ttf的,小編原先下載使用的字體格式是otf格式的無效)
(2)下載dompdf字體安裝工具解壓到根目錄(和vendor目錄同級)
下載地址:https://github.com/dompdf/utils
(3)在命令行(CMD定位到根目錄)下執行命令
php load_font.php "puhui" Alibaba-PuHuiTi-Light.ttf
執行成功后在路徑(vendor\dompdf\dompdf\lib\fonts)下就會出現剛才的字體
(4)在樣式文件中指定使用剛才安裝的字體
body{font-family:puhui;}
(5)再次導出PDF測試成功
亂碼問題解決
在儲存信息方面,硬盤與DNA相去甚遠。我們的基因編碼只需一克就能包含數十億Gb信息,一毫克就能收錄美國國會圖書館中的所有藏書內容,而且還能剩下足夠多的空間。當然,所有這一切只是理論上的推斷。現在,研究人員成功將一本書儲存在不到1微微克(10?12克)DNA中。這本HTML格式的書包含53,000個單詞和11幅JPEG圖像,以及一段JavaScript程序,大小為5.3MB,研究人員將其翻譯成DNA序列,每比特一堿基,堿基流然后以96堿基分組,每組鏈接到一個19堿基地址,地址指示了數據儲存在位置。所有這些序列用合成機器轉成DNA,打印在DNA芯片上。
DNA是已知密度最高也最穩定的信息存儲介質。理論上而言,DNA的每個核苷酸可以編碼兩個比特,每克單鏈DNA的存儲容量可達455艾字節(1艾字節=10的18次方字節,1字節=8比特),大約相當于1000億張DVD光盤的容量,存儲密度幾乎是閃存等現有數字媒體的五六百倍。而且,存儲在DNA中的數據時隔幾千后年仍能夠被讀出。
此前曾有研究人員嘗試過將數據寫進活細胞的基因組內,但這種方法存在很多問題:首先,一旦細胞死亡,存儲的內容將會丟失;其次,細胞會分裂復制,在這一過程中可能會產生新的變異,從而更改存儲數據。此外,利用DNA長序列讀取和寫入數據存在一定難度,而且成本很高,這使得利用DNA進行大規模數據存儲不太現實。
為了解決這些問題,哈佛醫學院合成生物學家喬治·丘吉爾帶領的研究團隊不使用細胞,而是用噴墨打印機將化學合成的DNA短片段嵌入到一個微小的玻璃芯片表面。他們將一本由丘吉爾參與編寫的遺傳學課本轉換成“0”和“1”的比特形式,并用DNA的4個堿基中的A或C來編碼 “0”,G或T來編碼“1”,從而將課本內容寫入了DNA中。這個DNA芯片采用了類似于計算機硬盤分區的方式,將課本內容分散為數據塊來存儲。
讀取這些數據則需要一個DNA測序儀和一臺計算機。由于每個DNA片段中都包含著一個數字“條形碼”,記錄了其在原始文件中的位置,因此所有的片段可被重新組裝,并轉換成數字格式。電腦還能幫助糾錯:每個數據塊都被復制了數千次,通過與其他副本相比較,任何一個小錯誤都可以被識別并修復。
研究人員將課本內容存入DNA,然后又重新轉化為數字形式讀出,結果顯示,這個存儲系統的底層讀取錯誤率為每百萬比特只有兩個錯誤,可與DVD比肩,遠遠優于磁性硬盤驅動器。不過,由于數據編碼是與DNA合成同步完成的,因此這種方式不支持可擦寫數據存儲,但適用于長期歸檔存儲。
研究人員表示,因受操作成本、速度(此次花了大約幾天時間)和測序儀大小的制約,將DNA作為一種通用的數據存儲介質目前還不切實際,但這一領域正在快速發展,未來5年到10年內有望開發出比傳統數字存儲設備更快、更小、更便宜的DNA存儲技術。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。