整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JS寫的服務端,如何連接Mysql數據庫,實現增刪查改功能

          一篇文章我給大家說明了如何從零開始搭建一個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存儲技術。


          主站蜘蛛池模板: 国产AV午夜精品一区二区三| 国产福利91精品一区二区| 香蕉免费看一区二区三区| 蜜桃视频一区二区| 寂寞一区在线观看| 精品一区二区三区影院在线午夜 | 国产精品一区不卡| 538国产精品一区二区在线| 精品福利视频一区二区三区 | 亚洲毛片αv无线播放一区| 精品视频一区二区三三区四区| 亚洲乱码一区av春药高潮| 国产精品免费综合一区视频| 国产视频一区二区在线播放| 午夜福利一区二区三区高清视频| 国模无码视频一区| 国产日韩精品一区二区三区在线 | 久久高清一区二区三区| 日韩精品无码一区二区三区不卡| 韩国精品一区二区三区无码视频 | 国产精品乱码一区二区三区| 国产激情з∠视频一区二区| 亚洲国产成人精品久久久国产成人一区二区三区综 | 福利一区二区三区视频午夜观看| 国产福利一区二区三区在线观看| 国产一区二区三区在线观看免费| 韩日午夜在线资源一区二区| 一区二区视频在线免费观看| 久久精品国产免费一区| 精品国产天堂综合一区在线| AV无码精品一区二区三区| 97一区二区三区四区久久| 国产人妖视频一区在线观看 | 毛片一区二区三区无码| 福利一区二区在线| 夜夜嗨AV一区二区三区| 色欲综合一区二区三区| 精品国产一区在线观看| 久久se精品一区精品二区国产| 亚洲国产一区二区三区青草影视| 无码人妻精一区二区三区|