ArthurSlog
SLog-1
Year·1
Guangzhou·China
-
July 6th 2018
沒有人能阻擋我前進(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ù)交互。