NodeJs + Mysql 實現項目開發


第一步:在本地環境安裝MySQL

Mac 安裝 MySQL整體流程:

https://www.cnblogs.com/nickchen121/p/11145123.html

MySQL 使用命令行:

# 啟動 MySQL
sudo mysql.server start   

sudo /usr/local/mysql/support-files/mysql.server start

# 停止MySql服務:
sudo /usr/local/mysql/support-files/mysql.server stop

# 重啟MySql服務:
sudo /usr/local/mysql/support-files/mysql.server restart

# 進入 MySQL
mysql -u root -p      

# 列出 MySQL 數據庫管理系統的數據庫列表
SHOW DATABASES;    

# 查看數據庫的編碼方式
show variables like 'character%'; 

MySQL 安裝流程注意事項:

注意一定要配置 my.cnf 文件,更改數據庫的編碼格式為utf8,否則錄入中文數據會顯示亂碼。可通過  查看數據庫的編碼方式 命令行查看數據庫的編碼格式,為以下情況正常:

 

 

第二步:安裝數據庫可視化界面操作工具

MAC環境下使用的是 sequel-pro 

下載地址為 http://www.sequelpro.com/

操作教程 https://blog.csdn.net/huacha__/article/details/81662142

注意事項:創建新的數據表時,要選擇編碼格式為utf8,否則寫入的中文會變成?? 亂碼

 

 


第三步:對數據庫進行增刪改查,使用express框架

基本流程參考:

https://blog.csdn.net/hust_cxl/article/details/79929093

https://www.cnblogs.com/cth0/p/11680134.html

const express = require('express') // 引入express模塊
const mysql = require('mysql') // 引入mysql模塊

// 創建mysql實例
const connection = mysql.createConnection({
  host: '127.0.0.1',   // 服務器端口
  user: 'root',        // 用戶名稱
  password: 'xiaojie520110',  // 密碼
  database: 'test'         // 連接的數據庫
});
const app = express()  // 創建express的實例
const port = 3000  // 定義監聽端口


connection.connect();  // 啟動連接數據庫

// MySQL語法,這句意思為查詢 SELECT * FROM表示查詢,test1表示查詢的數據表
const showSql = 'SELECT * FROM tets2'

// MySQL語法,這句意思為增加數據 INSERT INTO表示增加,test1表示增加的數據表 (name, age, email)為數據格式 VALUES(?,?,?) 為值
const addSql = "INSERT INTO tets2 (name, age, email) VALUES (?,?,?)";
const addSqlParams = ['菜鳥', 18, 'https://c.xxrunoob.com']; // 這是想增加的數據

// 寫入數據
connection.query(addSql, addSqlParams, function (err, result) {
  if (err) {  // 操作失敗報錯
    console.log('[SELECT ERROR]:', err.message);
  }
  console.log(result);  //數據庫查詢結果返回到result中
});

// 查詢數據
connection.query(showSql, function (err, result) {
  if (err) {  // 操作失敗報錯
    console.log('[SELECT ERROR]:', err.message);
  }
  console.log(result);  //數據庫查詢結果返回到result中
});

// 服務器響應請求
app.get('/', (req, res) => {
  connection.query(showSql, function (err, result) {
    if (err) {  // 操作失敗報錯
      console.log('[SELECT ERROR]:', err.message);
    }
    console.log(result);  //數據庫查詢結果返回到result中
    res.send(result[0])

  });
})

// 監聽3000端口
app.listen(port, () => console.log(`Example app listening on port ${port}!`))



// connection.end(); //結束連接!!!不能一直連着!!

 

 

第四步:定義請求接口,連接前端頁面

后端定義的各個接口,本質上其實就是一個路由地址。例如 https://gw.n8n8.cn/list 這個后端接口,采用的是GET請求。當前端使用AJAX對這個接口發起請求的時候,實際上是觸發后端執行對應的路由 “ /list ” 的邏輯。

對應到 express 里面,也就是觸發 express 里面定義好的路由:在本地環境進行測試,這里的域名使用的是 127.0.0.1 ,也就是指向本地

POST請求需要使用 json解析中間件(body-parser),參考鏈接 https://www.cnblogs.com/xyyl/p/11039506.html

express 例子:

const express = require('express') // 引入express模塊
const mysql = require('mysql') // 引入mysql模塊
const bodyParser = require('body-parser');/*支持post方法*/

const app = express()  // 創建express的實例
const port = 3000  // 定義監聽端口

app.use(bodyParser.json());// 添加json解析
app.use(bodyParser.urlencoded({ extended: false }));

// 定義連接的數據庫
const connection = mysql.createConnection({
  host: '127.0.0.1',   // 服務器端口
  user: 'root',        // 用戶名稱
  password: 'xiaojie520110',  // 密碼
  database: 'test'         // 連接的數據庫
});

// 允許接口跨域  這里指定允許所有接口跨域
app.all('*', function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
});


connection.connect();  // 啟動連接數據庫

// MySQL語法,這句意思為查詢 SELECT * FROM表示查詢,tets2表示查詢的數據表
const showSql = 'SELECT * FROM tets2'

// 服務端響應login接口,POST請求方式
app.post('/login', function (req, res, next) {
  const username = req.body.name; //獲取post請求參數
  const pwd = req.body.passwor;
  res.json({ name: username, pwd: pwd });//數據返回前端
});

// 服務器響應請求 當前端發起 /list 接口的請求后,會觸發這個邏輯
app.get('/list', (req, res) => {
  connection.query(showSql, function (err, result) {
    if (err) {  // 操作失敗報錯
      console.log('[SELECT ERROR]:', err.message);
    }
    res.send(result)  // 將查詢結果返回給頁面
  });
})

// 監聽3000端口
app.listen(port, () => console.log(`Example app listening on port ${port}!`))



// connection.end(); //結束連接!!!不能一直連着!!

 

 

前端頁面使用AJAX發起請求:

// 觸發express里定義好的 /show 路由里各個邏輯
$.get("http://127.0.0.1:3000/show", function (data, status) {
    console.log(data)
});

 

第五步: 在express中定義各種接口給前端頁面調用

前端頁面接口定義:

  // 增加數據
      $.post("http://127.0.0.1:3000/add", {
        name: "新增的數據",
        age: 22,
        email: "http://www.more.com"
      }, function (data, status) {
        console.log(data)
      });

      // 刪除數據
      $.post("http://127.0.0.1:3000/delete", {
        id: 11,
      }, function (data, status) {
        console.log(data)
      });

      // 更改數據
      $.post("http://127.0.0.1:3000/edit", {
        id: 9,
        name: "更改數據",
        email: "http://www.baidu.com"
      }, function (data, status) {
        console.log(data)
      });

      // 查詢數據
      $.get("http://127.0.0.1:3000/list", function (data, status) {
        console.log(data)
      });

后端接口定義:

//
app.post('/add', function (req, res, next) {
  const name = req.body.name;
  const email = req.body.email;
  const age = req.body.age;

  const addSqlParams = [name, email, age];
  // MySQL語法,這句意思為查詢 INSERT INTO表示新增,tets2表示查詢的數據表 (name,email,age) VALUES(?,?,?) 表示新增的字段
  const addSql = 'INSERT INTO tets2(name,email,age) VALUES(?,?,?)';

  connection.query(addSql, addSqlParams, function (err, result) {
    if (err) {
      console.log('[UPDATE ERROR] - ', err.message);
      return;
    }
    res.json(result);//數據返回結果
  });

});

//
app.post('/delete', function (req, res, next) {
  const id = req.body.id;
  const delSql = `DELETE FROM tets2 where id=${id}`; //數據庫代碼,tets2表中刪除id為傳入值的那一行。

  connection.query(delSql, function (err, result) {
    if (err) {
      console.log('[UPDATE ERROR] - ', err.message);
      return;
    }
    res.json(result);//數據返回結果
  });
});

//
app.post('/edit', function (req, res, next) {
  const id = req.body.id;
  const name = req.body.name;
  const email = req.body.email;

  const modSqlParams = [name, email, id];
  // MySQL語法,這句意思為改數據 UPDATE 表示更改,tets2表示更改的數據表 SET  name= ?,email = ? 表示更改name 和 email字段,WHERE Id = ? 表示更改條件 
  const modSql = 'UPDATE tets2 SET  name= ?,email = ? WHERE Id = ?';

  connection.query(modSql, modSqlParams, function (err, result) {
    if (err) {
      console.log('[UPDATE ERROR] - ', err.message);
      return;
    }
    res.json(result);//數據返回結果
  });

});



//
app.get('/list', (req, res) => {
  // MySQL語法,這句意思為查詢 SELECT * FROM表示查詢,tets2表示查詢的數據表
  const showSql = 'SELECT * FROM tets2'

  connection.query(showSql, function (err, result) {
    if (err) {  // 操作失敗報錯
      console.log('[SELECT ERROR]:', err.message);
    }
    res.send(result)

  });
})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM