Slog1_如何使用nodejs與mysql進(jìn)行數(shù)據(jù)交互

  • ArthurSlog

  • SLog-1

  • Year·1

  • Guangzhou·China

  • July 6th 2018


    icon_128.jpg

沒有人能阻擋我前進(jìn)的道路

安裝nodejs作為開發(fā)服務(wù)器的工具(macOS)

  • 打開終端,切換至Desktop路徑

cd Desktop

  • 新建一個文件夾“nodejs_learningload”

mkdir nodejs_learningload

  • 切換至nodejs_learningload路徑

cd nodejs_learningload

  • 現(xiàn)在開始安裝nodejs了:
  • 使用homebrow這個工具來協(xié)助我們

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  • 根據(jù)命令行提示繼續(xù)操作,完成homebrew的下載和安裝(下載坪蚁、安裝可能需要一些時間)袄友,然后使用brew安裝nodejs

brew install node

  • 檢查node是否完整安裝

node -v

v10.6.0

npm -v

6.1.0

  • 至此nodejs完整安裝完成

安裝Mysql涯冠,配置Mysql

  • 使用brew安裝mysql

brew install mysql

  • 啟動mysql,檢查mysql是否完整安裝

mysql.server start

  • Starting MySQL
  • .SUCCESS!
  • 配置Mysql,設(shè)置root賬戶的密碼為8個8

mysqladmin -u root password 88888888

  • 登陸數(shù)據(jù)庫

mysql -u root -p

  • 輸入密碼谆甜,再按enter鍵,命令行會變成以下狀態(tài)

mysql>

  • 輸入SQL命令畦攘,按enter鍵執(zhí)行梦鉴,列出已有的數(shù)據(jù)庫

mysql> show databases;

Database
information_schema
mysql
performance_schema
sys

4 rows in set(0.01 sec)

  • 我們創(chuàng)建一個數(shù)據(jù)庫"my_db"

mysql> create database my_db;

Query OK, 1 row affected (0.02 sec)

  • 進(jìn)入my_db數(shù)據(jù)庫

mysql> use my_db;

Database changed

  • 我們創(chuàng)建一個表“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)

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

Query OK, 1 row affected (0.08 sec)

  • 查看一下Account表

mysql> SELECT * FROM Account;

ID AccountName Password
1 KingArthur KingArthur

1 row in set (0.00 sec)

  • 退出mysql交互模式

exit;

Bye

實(shí)現(xiàn)nodejs和Mysql的數(shù)據(jù)交互

  • 切換當(dāng)前路徑至~/Desktop/nodejs_learningload

cd ~/Desktop/nodejs_learningload

  • 使用npm李茫,執(zhí)行npm命令初始化環(huán)境

npm init

  • 一路默認(rèn)enter就行,再當(dāng)前路徑下生成一個package.json文件
  • 使用npm肥橙,執(zhí)行npm命令安裝express模塊

sudo npm install express

  • 接下來魄宏,開始編寫邏輯代碼
  • 一共要寫兩個個文件,index.html存筏、index.js
  • index.html: 主頁
  • index.js: web服務(wù)器宠互,提供web服務(wù)和路由功能,其中還有最為關(guān)鍵的函數(shù)(路由)椭坚,可以連接數(shù)據(jù)庫名秀,執(zhí)行SQL命令的函數(shù)

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>
  • 其中,關(guān)鍵的地方在這個位置
    <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>標(biāo)簽
action="http://127.0.0.1:8081/singupAccount" method="GET"
  • 仔細(xì)看這里
action="http://127.0.0.1:8081/singupAccount"
  • express的路由功能在這里體現(xiàn)
/singupAccount
  • 這個路由(方法)/singupAccount藕溅,我們將會在另一個文件(index.js)里編寫好匕得,以供前端調(diào)用

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('執(zhí)行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("應(yīng)用實(shí)例,訪問地址為 http://%s:%s", host, port)
})
  • 在index.js里面巾表,使用express模塊的靜態(tài)路由功能汁掠,路由的是我們的主頁

  • 靜態(tài)路由,程序一啟動就會執(zhí)行靜態(tài)路由的方法集币,這個方法就是打開我門的主頁

var express = require('express');

var app = express();
 
app.use(express.static(__dirname));
  • 使用express的web服務(wù)器功能考阱,實(shí)現(xiàn)了一個web服務(wù)器,ip:127.0.0.1:8081
var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("應(yīng)用實(shí)例鞠苟,訪問地址為 http://%s:%s", host, port)
}
  • 最關(guān)鍵的地方在下面這里乞榨,實(shí)現(xiàn)了一個路由(方法)秽之,當(dāng)前端路由到這個方法的時候,讓程序連接mysql數(shù)據(jù)庫吃既,并向mysql數(shù)據(jù)庫里添加數(shù)據(jù)
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('執(zhí)行sql出錯!');
            return;
        }
        res.send('Welcome~ SingUp Success ^_^');
    });

    connection.end();
 })
  • /singupAccount這個路由(方法)是關(guān)鍵考榨,首先,在方法里面需要先配置mysql連接參數(shù)
    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '88888888',
      database : 'my_db'
    });
  • 連接參數(shù)配置好后鹦倚,連接mysql數(shù)據(jù)庫
connection.connect();
  • 成功連接上mysql數(shù)據(jù)庫了河质,前端的數(shù)據(jù)會先傳遞給路由(方法)/singupAccount
  • 這個時候前端的數(shù)據(jù)是保存在全局變量req.query里面的,一共有兩個值“name”和“password”
req.query.name
req.query.password
  • 此時震叙,聲明一個變量response用來保存這兩個前端傳過來的值
    var response = {
        "name":req.query.name,
        "password":req.query.password
    };
  • OK,現(xiàn)在需要做最后一步了掀鹅,讓Mysql執(zhí)行SQL命令,把前端的傳過來的數(shù)據(jù)正確的插入數(shù)據(jù)庫里
    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('執(zhí)行sql出錯!');
            return;
        }
        res.send('Welcome~ SingUp Success ^_^');
    });
  • 執(zhí)行完SQL命令后媒楼,斷開與數(shù)據(jù)庫的連接
connection.end();

最終測試

  • 首先打開終端乐尊,并打開mysql數(shù)據(jù)庫,查看Account表里的內(nèi)容
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> 
  • 再打開一個新的終端划址,切換當(dāng)前路徑至~/Desktop/nodejs_learningload,執(zhí)行index.js文件扔嵌,啟動web服務(wù)器

node index.js

  • 打開瀏覽器,鍵入地址127.0.0.1:8081猴鲫,打開主頁
  • 鍵入“Name”值“KingArthur2”,鍵入“Password”值“KingArthur2”谣殊,然后點(diǎn)擊提交
  • 頁面跳轉(zhuǎn)拂共,并顯示“Welcome~ SingUp Success _
  • 此時,調(diào)出另一終端姻几,查看數(shù)據(jù)庫里的Account表
  • mysql> select * from Account;

ID  AccountName Password
1   KingArthur  KingArthur
2   KingArthur2 KingArthur2
2 row in set (0.00 sec)
  • 至此宜狐,nodejs與mysql成功進(jìn)行了數(shù)據(jù)交互。

歡迎關(guān)注我的微信公眾號 ArthurSlog

icon_128.jpg

如果你喜歡我的文章 歡迎點(diǎn)贊 留言

謝謝

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛇捌,一起剝皮案震驚了整個濱河市抚恒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌络拌,老刑警劉巖俭驮,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異春贸,居然都是意外死亡混萝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門萍恕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逸嘀,“玉大人,你說我怎么就攤上這事允粤≌柑龋” “怎么了翼岁?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長司光。 經(jīng)常有香客問我琅坡,道長,這世上最難降的妖魔是什么飘庄? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任脑蠕,我火速辦了婚禮,結(jié)果婚禮上跪削,老公的妹妹穿的比我還像新娘谴仙。我一直安慰自己,他們只是感情好碾盐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布晃跺。 她就那樣靜靜地躺著,像睡著了一般毫玖。 火紅的嫁衣襯著肌膚如雪掀虎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天付枫,我揣著相機(jī)與錄音烹玉,去河邊找鬼。 笑死阐滩,一個胖子當(dāng)著我的面吹牛二打,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掂榔,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼继效,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了装获?” 一聲冷哼從身側(cè)響起瑞信,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎穴豫,沒想到半個月后凡简,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡精肃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年潘鲫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肋杖。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡溉仑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出状植,到底是詐尸還是另有隱情浊竟,我是刑警寧澤怨喘,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站振定,受9級特大地震影響必怜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜后频,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一梳庆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卑惜,春花似錦膏执、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至毫痕,卻和暖如春征峦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背消请。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工栏笆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人臊泰。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓蛉加,卻偏偏與公主長得像,于是被迫代替她去往敵國和親因宇。 傳聞我的和親對象是個殘疾皇子七婴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容