如何使用nodejs与mysql进行数据交互

  • ArthurSlog
  • SLog-1
  • Year·1

  • Guangzhou·China

  • July 6th 2018
    如何使用nodejs与mysql进行数据交互_第1张图片

没有人能阻挡我前进的道路

安装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.com/Homebrew/install/master/install)”
  • 根据命令行提示继续操作,完成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,设置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)

  • 我们创建一个数据库”my_db”

    mysql> create database my_db;


Query OK, 1 row affected (0.02 sec)
* 进入my_db数据库
mysql> use my_db; Database changed * 我们创建一个表“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表里插入一行数据
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 ArthurSlog ArthurSlog

1 row in set (0.00 sec)


  • 退出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

<html>
<head>
<meta charset="utf-8">
<title>SingUptitle>
head>
<body>
    <p>Sing upp>
    <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>
  • 这里使用\\标签
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成功进行了数据交互。

希望大家 多多关注、支持

谢谢

你可能感兴趣的:(Mysql,前端,后端,数据库,Nodejs)