Slog1_如何使用nodejs與mysql進行數據交互

  • ArthurSlog
  • SLog-1
  • Year·1
  • Guangzhou·China
  • July 6th 2018

關注微信公衆號「環遊的球」

沒有人能阻擋我前進的道路html

安裝nodejs做爲開發服務器的工具(macOS)

  • 打開終端,切換至Desktop路徑
cd Desktop
  • 新建一個文件夾「nodejs_learningload」
mkdir nodejs_learningload
  • 切換至nodejs_learningload路徑
cd nodejs_learningload
  • 如今開始安裝nodejs了:
  • 使用homebrow這個工具來協助咱們
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent...)"
  • 根據命令行提示繼續操做,完成homebrew的下載和安裝(下載、安裝可能須要一些時間),而後使用brew安裝nodejs
brew install node
  • 檢查node是否完整安裝
node -v

v10.6.0前端

npm -v

6.1.0node

  • 至此nodejs完整安裝完成

安裝Mysql,配置Mysql

  • 使用brew安裝mysql
brew install mysql
  • 啓動mysql,檢查mysql是否完整安裝
mysql.server start
  • Starting MySQL
  • .SUCCESS!
  • 配置Mysql,設置root帳戶的密碼爲8個8
mysqladmin -u root password 88888888
  • 登錄數據庫
mysql -u root -p
  • 輸入密碼,再按enter鍵,命令行會變成如下狀態
mysql>
  • 輸入SQL命令,按enter鍵執行,列出已有的數據庫
mysql> show databases;
Database
information_schema
mysql
performance_schema
sys

4 rows in set(0.01 sec)mysql

  • 咱們建立一個數據庫"my_db"
mysql> create database my_db;

Query OK, 1 row affected (0.02 sec)git

  • 進入my_db數據庫
mysql> use my_db;

Database changedgithub

  • 咱們建立一個表「Account"
mysql> CREATE TABLE Account
(
ID int NOT NULL AUTO_INCREMENT,
AccountName varchar(255) NOT NULL,
Password varchar(255) NOT NULL,
PRIMARY KEY (ID)
);

Query OK, 0 rows affected (0.09 sec)web

  • 向Account表裏插入一行數據
mysql> INSERT INTO Account (AccountName, Password)
VALUES ('ArthurSlog','ArthurSlog);

Query OK, 1 row affected (0.08 sec)sql

  • 查看一下Account表
mysql> SELECT * FROM Account;

ID|AccountName|Password數據庫

1 | KingArthur | KingArthur
1 row in set (0.00 sec)express

  • 退出mysql交互模式
exit;

Bye

實現nodejs和Mysql的數據交互

  • 切換當前路徑至~/Desktop/nodejs_learningload
cd ~/Desktop/nodejs_learningload
  • 使用npm,執行npm命令初始化環境
npm init
  • 一路默認enter就行,再當前路徑下生成一個package.json文件
  • 使用npm,執行npm命令安裝express模塊
sudo npm install express
  • 接下來,開始編寫邏輯代碼
  • 一共要寫兩個個文件,index.html、index.js
  • index.html: 主頁
  • index.js: web服務器,提供web服務和路由功能,其中還有最爲關鍵的函數(路由),能夠鏈接數據庫,執行SQL命令的函數

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SingUp</title>
</head>
<body>
    <p>Sing up</p>
    <form action="http://127.0.0.1:8081/singupAccount" method="GET">
        Name: <input type="text" name="name"> 
        <br>
        Password: <input type="text" name="password">
        <br>
        <input type="submit" value="註冊">
    </form>
    <br>
</body>
</html>
  • 其中,關鍵的地方在這個位置
<form action="http://127.0.0.1:8081/singupAccount" method="GET">
        Name: <input type="text" name="name"> 
        <br>
        Password: <input type="text" name="password">
        <br>
        <input type="submit" value="註冊">
    </form>
  • 這裏使用<from></from>標籤
action="http://127.0.0.1:8081/singupAccount" method="GET"
  • 仔細看這裏
action="http://127.0.0.1:8081/singupAccount"
  • express的路由功能在這裏體現
/singupAccount
  • 這個路由(方法)/singupAccount,咱們將會在另外一個文件(index.js)裏編寫好,以供前端調用

index.js

var express = require('express');
var fs = require("fs");
var app = express();
 
app.use(express.static(__dirname));

app.get('/singupAccount', function (req, res) {
 
    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '88888888',
      database : 'my_db'
    });
     
    connection.connect();

    var response = {
        "name":req.query.name,
        "password":req.query.password
    };

    var  addSql = 'INSERT INTO Account(AccountName, Password) VALUES(?,?)';
    var  addSqlParams = [response.name, response.password];

    connection.query(addSql,addSqlParams,function (err, result) {
        if(err){
            console.log('[INSERT ERROR] - ',err.message);
            res.send('執行sql出錯!');
            return;
        }
        res.send('Welcome~ SingUp Success ^_^');
    });

    connection.end();
 })

var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("應用實例,訪問地址爲 http://%s:%s", host, port)
})
  • 在index.js裏面,使用express模塊的靜態路由功能,路由的是咱們的主頁
  • 靜態路由,程序一啓動就會執行靜態路由的方法,這個方法就是打開我門的主頁
var express = require('express');

var app = express();
 
app.use(express.static(__dirname));
  • 使用express的web服務器功能,實現了一個web服務器,ip:127.0.0.1:8081
var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("應用實例,訪問地址爲 http://%s:%s", host, port)
}
  • 最關鍵的地方在下面這裏,實現了一個路由(方法),當前端路由到這個方法的時候,讓程序鏈接mysql數據庫,並向mysql數據庫裏添加數據
app.get('/singupAccount', function (req, res) {
 
    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '88888888',
      database : 'my_db'
    });
     
    connection.connect();

    var response = {
        "name":req.query.name,
        "password":req.query.password
    };

    var  addSql = 'INSERT INTO Account(AccountName, Password) VALUES(?,?)';
    var  addSqlParams = [response.name, response.password];

    connection.query(addSql,addSqlParams,function (err, result) {
        if(err){
            console.log('[INSERT ERROR] - ',err.message);
            res.send('執行sql出錯!');
            return;
        }
        res.send('Welcome~ SingUp Success ^_^');
    });

    connection.end();
 })
  • /singupAccount這個路由(方法)是關鍵,首先,在方法裏面須要先配置mysql鏈接參數
var mysql      = require('mysql');
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '88888888',
      database : 'my_db'
    });
  • 鏈接參數配置好後,鏈接mysql數據庫
connection.connect();
  • 成功鏈接上mysql數據庫了,前端的數據會先傳遞給路由(方法)/singupAccount
  • 這個時候前端的數據是保存在全局變量req.query裏面的,一共有兩個值「name」和「password」
req.query.name
req.query.password
  • 此時,聲明一個變量response用來保存這兩個前端傳過來的值
var response = {
        "name":req.query.name,
        "password":req.query.password
    };
  • OK,如今須要作最後一步了,讓Mysql執行SQL命令,把前端的傳過來的數據正確的插入數據庫裏
var  addSql = 'INSERT INTO Account(AccountName, Password) VALUES(?,?)';
    var  addSqlParams = [response.name, response.password];

    connection.query(addSql,addSqlParams,function (err, result) {
        if(err){
            console.log('[INSERT ERROR] - ',err.message);
            res.send('執行sql出錯!');
            return;
        }
        res.send('Welcome~ SingUp Success ^_^');
    });
  • 執行完SQL命令後,斷開與數據庫的鏈接
connection.end();

最終測試

  • 首先打開終端,並打開mysql數據庫,查看Account表裏的內容
mysql -u root -p
Enter password:

mysql>
mysql> use my_db;
Database changed
mysql> select * from Account;

ID    AccountName    Password
1    KingArthur    KingArthur
1 row in set (0.00 sec)
mysql>
  • 再打開一個新的終端,切換當前路徑至~/Desktop/nodejs_learningload,執行index.js文件,啓動web服務器
node index.js
  • 打開瀏覽器,鍵入地址127.0.0.1:8081,打開主頁
  • 鍵入「Name」值「KingArthur2」,鍵入「Password」值「KingArthur2」,而後點擊提交
  • 頁面跳轉,並顯示「Welcome~ SingUp Success ^_^」
  • 此時,調出另外一終端,查看數據庫裏的Account表
  • mysql> select * from Account;
ID    AccountName    Password
1    KingArthur    KingArthur
2   KingArthur2 KingArthur2
2 row in set (0.00 sec)
  • 至此,nodejs與mysql成功進行了數據交互。

歡迎關注個人微信公衆號 ArthurSlog

ArthurSlog

若是你喜歡個人文章 歡迎點贊 留言

謝謝

相關文章
相關標籤/搜索