1. 程式人生 > >nodejs連線mysql資料庫及基本認識

nodejs連線mysql資料庫及基本認識

一、幾個常用的全域性變數

  • 1、__filename獲取當前檔案的路徑
  • 2、__dirname獲取當前檔案的目錄
  • 3、process.cwd()獲取當前工程的目錄

二、檔案的引入與匯出

  • 1、使用require引入檔案
  • 2、使用module.exports匯出檔案中指定的變數、方法、物件

三、node專案的搭建目錄結構

demo
    package.json 當前專案所依賴的包或者模組
    router  存放路由的檔案
    views   存放檢視的模組
    public  靜態檔案
    module 書寫模組比如資料庫
    app.js 主入口檔案

四、將路由檢視單獨寫在router檔案中demo

  • 1、檢視檢視檔案

    const express = require("express");
    const router = express.Router();
    
    router.get("/", (req, res) => {
        res.send("hello word");
    });
    router.get("/article", (req, res) => {
        res.send("我是文章列表");
    })
    
    module.exports = router;
  • 2、在主檔案中呼叫

    'use strict';
    const
    express = require("express"); const app = express(); app.use("/",require("./router/03_router")) app.use("/app",require("./router/03_router1")) app.listen(3000);

五、使用ejs模板

  • 1、需要安裝但可以不引入npm install ejs --save
  • 2、在主檔案中配置

    //配置模板的檔案路徑
    app.set("views",__dirname+"/views");
    //配置模板引擎
    app.set("view engine","ejs");
  • 3、使用

    • 1、模板檔案

      <!doctype html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta name="viewport"
                content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
          <meta http-equiv="X-UA-Compatible" content="ie=edge">
          <title>Document</title>
      </head>
      <body>
      <h1>我是模板渲染的</h1>
      </body>
      </html>
    • 2、在路由中渲染模板

      'use strict';
      const express = require("express");
      const router = express.Router();
      
      router.get("/", (req, res) => {
          //可以直接使用res.render("03_index");
          res.render("03_index.ejs");
      });
      router.get("/article", (req, res) => {
          res.send("我是文章列表");
      })
      
      module.exports = router;
    • 3、主檔案

      'use strict';
      const express = require("express");
      const app = express();
      //配置模板的檔案路徑
      app.set("views",__dirname+"/views");
      //配置模板引擎
      app.set("view engine","ejs");
      
      app.use("/",require("./router/03_router"))
      app.use("/app",require("./router/03_router1"))
      
      app.listen(3000);

六、關於ejs模板檔案的使用

  • 1、返回資料

    ...
    let dataset = {
        name:"張三",
        age:20,
        books:['三國演義','西遊記','紅樓夢','水滸傳']
    }
    res.render("03_index.ejs",dataset);
    ...
  • 2、普通的欄位

    <h2><%= name %></h2>
    <h2><%= age %></h2>
  • 3、迭代陣列

    <ul>
        <% for(let i in books){%>
            <li><%= books[i] %></li>
        <%}%>
    </ul>

七、載入靜態檔案

  • 1、主檔案中配置

    //設定靜態檔案的載入(js,css,img)
    app.use(express.static(__dirname+"/public"));
  • 2、在模板中使用

    <link rel="stylesheet" href="./css/bootstrap.css">
    <script type="text/javascript" src="./js/jquery-3.1.1.min.js"></script>
    <img src="./img/002.jpg">
    ...

八、使用mysql資料庫

  • 1、在module中建立一個db.js的檔案

    'use strict';
    const mysql = require("mysql");
    
    /**
     * 將整個方法全部暴漏出去
     * @param sql sql語句
     * @param arg 傳遞到sql語句中的引數,可以不寫
     * @param callback 回撥函式,可以不寫
     */
    module.exports = function (sql,arg,callback) {
        //1.建立連線(根據自己的資料庫配置)
        let config = mysql.createConnection({
            host:"localhost", //資料庫的地址
            user:"root", //資料庫使用者名稱
            password:"root", //資料庫密碼
            port:"3306", //mysql資料庫的埠號
            database:"mybatistest" //使用那個資料庫
        });
        //2.開始連線資料庫
        config.connect();
        //3.對資料庫的增刪改查操作
        config.query(sql,arg,(err,data)=>{
            callback && callback(err,data);
        })
        //4.關閉資料庫
        config.end();
    }
  • 2、在router檢視中使用查詢資料

    • 1、引入檔案

      //引入資料庫檔案
      const db = require("./../module/db");
    • 2、檢視中使用

      router.get("/", (req, res) => {
          db("select * from m_dept",(err,data)=>{
              console.log(data);
              res.render("03_index.ejs",{data:data});
          })
      });
  • 3、新增資料

    • 1、前端頁面見程式碼案例
    • 2、通過req.query獲取使用者資料引數

      router.get("/regist",(req, res)=>{
          //獲取到輸入引數,前提是input上要寫name
          console.log(req.query);
          db("insert into student(name,age) values(?,?)",[req.query.username,req.query.age],(err,data)=>{
              console.log(data);
              if(data){
                  res.send("成功");
              }
          })
      })

九、關於node返回json的方式

在前後端分離開發模式中後端返回的資料一般都是json,不需要使用ejs模板引擎了

...
res.json({
    info:"成功",
    code:1
});
...

十、本章節程式碼程式碼案例