整合營銷服務商

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

          免費咨詢熱線:

          JavaScript-Object對象屬性的增、刪、

          JavaScript-Object對象屬性的增、刪、改、查與循環遍歷

          avaScript —— 極簡主義


          點關注,不迷路~

          一篇文章我給大家說明了如何從零開始搭建一個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頁面中進行測試。結果如下圖所示。

          經過測試,數據已經添加完成。所以數據庫連接也是正常的。

          本次分享暫時先告一段落。請各位小伙伴抬起你們發財的小手,點個贊唄。下次我將會進行和大家分享對數據查改刪的方法。關注我!!!更多精彩分享不迷路。

          .MySQL客戶端下,操作MySQL的步驟

          第一步:連接到MySQL數據庫服務器 mysql –uroot -root

          第二步:選擇要操作的數據庫(當前數據庫) use db_name

          第三步:設置字符集 set names gbk

          第四步:執行SQL語句:增、刪、改、查

          增加:INSERT INTO table_name(title,author,addate) VALUES(‘標題’,’admin’,now())

          刪除:DELETE FROM table_name WHERE 條件表達式

          修改:UPDATE table_name SET title=“新的標題” WHERE 條件表達式

          查詢:SELECT * FROM table_name WHERE條件 ORDER BY LIMIT

          2.PHP操作MySQL的步驟(MySQL的函數)

          第一步:連接MySQL數據庫服務器

          mysql_connect()

          含義:連接到MySQL數據庫服務器

          格式:resource mysql_connect(主機地址,用戶名,用戶密碼)

          返回值:如果連接成功返回資源標識符,如果連接失敗,返回false

          舉例:$link=mysql_connect(“localhost”,”root”,”root”);

          exit()

          含義:輸出信息后中斷腳本繼續向下運行

          格式:void exit([$string])

          說明:$string參數是可選的,如果沒有參數,則直接中斷;如果有參數,則先輸出,再中斷

          舉例:exit(“連接MySQL失敗”);

          header()

          含義:通過header()函數,向瀏覽器客戶端發送一些信息,如:字符集設置、網頁跳轉等。

          格式:void header($string)

          注意:header()函數前,不能有任何的輸出,包括:空格、空行、以及任何的HTML代碼。一般來說,header()函數應該寫在第一行代碼之前。

          舉例:

          header(“content-type:text/html;charset=utf-8”); //設置字符集

          header(“location:http://www.sina.com.cn”); //跳轉網頁

          以上是連接MySQL失敗的系統信息。一般情況下,不要將系統的出錯信息暴露給“黑客”。解決的辦法,可以將錯誤信息進行屏蔽。屏蔽用的符號是“@”符。

          舉例:$link=@mysql_connect("localhost","r9oot","root");

          mysql_get_host_info()

          含義:如果連通MySQL后,顯示服務器的一些信息。

          格式:mysql_get_host_info()

          第二步:選擇要操作的數據庫

          提示:一個中小型網站,只有一個數據庫,不會太多。

          mysql_select_db()

          含義:選擇當前做為操作的數據庫。

          格式:bool mysql_select_db(db_name[,$link])

          參數:db_name就是要選擇的數據庫名稱

          $link是可選項,代表當前活動連接。如果$link省略,則以上一次連接MySQL成功時的那個連接(資源)為準。

          舉例:mysql_select_db(“saixinjituan”)

          mysql_error()

          含義:顯示最近一次操作MySQL的出錯信息。

          格式:string mysql_error()

          第三步:設置MySQL返回的數據字符集

          mysql_query(“set names utf8”)

          提示:設置字符集,應在“選擇數據庫”之后,在其它的SQL語句執行之前。

          第四步:執行SQL語句

          mysql_query()

          含義:執行SQL語句,包括任何合法的SQL語句。

          格式:resource mysql_query(string $sql[,$link])

          參數:$sql是任何合法的SQL語句;$link是當前活動連接

          舉例:

          查詢前10條的新聞: $result=mysql_query(“select * from 007_news id<=10”);

          創建一個數據庫(要有權限):mysql_query(“CREATE DATABASE IF NOT EXISTS db_name”);

          刪除ID=10的記錄:mysql_query(“DELETE FROM 007_news WHERE id=10”);

          注意:mysql_query()對于select、describe、show返回資源標識符;對于其它的命令成功返回true,失敗返回false

          mysql_fetch_row()

          含義:從結果集中取得一行,作為枚舉數組返回。

          格式:array mysql_fetch_row(結果集$result)

          返回值:是一個枚舉數組,可通過print_r()來打印。

          mysql_fetch_array()

          含義:從結果集中取得一行,作為混合數組返回

          格式:array mysql_fetch_array($result)

          mysql_fetch_assoc()

          含義:從結果集中取得一行,作為關聯數組返回

          格式:array mysql_fetch_assoc($result)

          3.綜合案例

          企業網站的開發、制作基本分為前臺和后臺。

          前臺功能相對簡單,就是讀取數據(SELECT)。

          前臺功能相對復雜,方方面面都牽扯到了。

          網站后臺登錄的一個流程圖

          網站后臺的文件結構

          include文件夾:公共功能的文件夾(核心文件)

          config.php 公共配置文件

          conn.php 連接數據庫的公共文件

          functions.php 常用的函數定義文件

          第一功能模塊:先做登錄模塊

          (1)文件列表:

          login.php 登錄的靜態頁面

          login_check.php 獲取登錄信息,與數據庫進行比對

          (2)數據表:007_admin

          Username:用戶名

          Password:密碼,經過md5()函數加密碼

          Name:真實姓名

          Tel:聯系手機

          Lastloginip:最后登錄的客戶端的IP地址

          Lastlogintime:最后登錄成功的時間

          Loginhits:登錄的總次數

          Status:賬號的狀態,1為啟用,0為禁用。

          Addate:賬號的創建時間

          4.PHP全局數組

          如何獲取表單提交的數據?我們需要使用PHP全局數組來獲取。

          1
          $_SERVER[ ]:獲取服務器的一些相關信息$_SERVER[“SERVER_NAME”],網站的域名$_SERVER[“SERVER_ADDR”],服務的IP地址$_SERVER[“REMOTE_ADDR”],客戶端的IP地址$_POST[ ]:獲取method=post的表單提交的值$username=$_POST[“username”];$password=$_POST[“password”];$_GET[ ]:獲取 method=get 的表單提交的值$username=$_GET[“username”];$password=$_GET[“password”];

          5.包含文件:將其它的文件代碼包含(復制)進來

          include(fileName)包含外部文件,如:include(“cofig.php”)

          require(fileName)包含外部文件,如:require(“config.php”)

          include()和require()的區別(面試題)

          這兩個函數除了在出錯時處理方式不一樣,其它方面都一樣。

          include()如果包含文件中存在錯誤代碼,包含進來后,會輸出一個“警告錯誤信息”,程序會繼續向下運行。

          Require()如果包含文件中存儲錯誤代碼,包含進來后,會輸出一個“致命錯誤信息”,并終止程序繼續向下運行。

          6.URL編碼函數

          Urlencode():此字符串中除了 -_.之外的所有非字母數字字符都將被替換成百分號(%)后跟兩位十六進制數,空格則編碼為加號(+)。此編碼與 WWW 表單 POST 數據的編碼方式是一樣的

          urlencode(“非法用戶”)的結果是“%E9%9D%9E%E6%B3%95%E7%94%A8%E6%88%B7”

          urldecode():對使用urlencode()編碼后的字符進行解碼。

          md5()對字符進行加密,返回一個32位的字符串,單向加密。

          7.mysql_num_row($result):取出返回的字錄數


          主站蜘蛛池模板: 日韩精品无码一区二区三区不卡| 偷拍精品视频一区二区三区| 精品国产一区二区三区久久 | 中文字幕一区精品| 精品一区二区视频在线观看| 国产人妖视频一区二区破除| 国产在线精品一区二区不卡| 日韩一区二区三区电影在线观看| 久久久91精品国产一区二区三区| 国产精品亚洲一区二区无码| 国产成人无码一区二区三区| 美女AV一区二区三区| 久久精品无码一区二区三区不卡| 国产AV一区二区三区传媒| 国产色情一区二区三区在线播放| 国产SUV精品一区二区88L | 波多野结衣的AV一区二区三区| 日韩成人无码一区二区三区 | 国产精品视频无圣光一区| 学生妹亚洲一区二区| 韩国福利一区二区美女视频| 亚洲一区二区三区首页| 国产av一区二区三区日韩 | 无码少妇一区二区性色AV| 国产精品亚洲综合一区| 精品国产免费一区二区三区 | 国产在线不卡一区| 一区二区三区四区电影视频在线观看 | 日本高清天码一区在线播放| 亚洲.国产.欧美一区二区三区| 国内精品一区二区三区东京| 久久久无码精品人妻一区| 日韩成人一区ftp在线播放| 精品无码人妻一区二区三区18| 亚洲欧美日韩中文字幕在线一区| 高清精品一区二区三区一区| 午夜视频一区二区三区| 人妻无码一区二区三区| 日本高清不卡一区| 亚洲av无码一区二区三区四区| 日韩三级一区二区三区|