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

ByteRiftMaster
• 阅读 2241
  • ArthurSlog
  • SLog-1
  • Year·1
  • Guangzhou·China
  • July 6th 2018

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

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

安装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.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 | KingArthur | KingArthur
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

<!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

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

如果你喜欢我的文章 欢迎点赞 留言

谢谢

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(