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

若是你喜欢个人文章 欢迎点赞 留言

谢谢

相关文章
相关标签/搜索