Node.js+Express+Mysql 实现增删改查


Posted in Javascript onApril 03, 2019

这次选用nodejs+express+mysql 使用http作为客户端,express框架搭建服务端,从而实现数据的增删改查。这篇文章可以算作上篇文章的升级篇,加入了和数据库的交互。

安装

node 直接去官网下载选择下载即可https://nodejs.org/en/download/current/

cnpm install express //express框架安装
cnpm install mysql //mysql驱动安装
brew install mysql //数据库的安装,根据命令行提示初始化配置
 mysql.server start//启动mysql服务
 mysql.server stop//停止mysql服务
 mysql -u用户名 -p用户密码//登录mysql

nodejs连接数据库时报错

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support
authentication protocol requested by server; consider upgrading MySQL client

查到的结论是: MySQL8.0版本的加密方式和MySQL5.0的不一样,连接会报错。

解决方法如下: 通过命令行进入解压的mysql根目录下。

登陆数据库

mysql -uroot -p

输入root的密码

Enter password: ******

更改加密方式

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;

更改密码:该例子中 123456为新密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

刷新:

mysql> FLUSH PRIVILEGES;

数据库的连接

var mysql = require('mysql');//引入数据库驱动模块
//console.log(mysql)
// 连接数据库的配置
var connection = mysql.createConnection({
 // 主机名称,一般是本机
 host: 'localhost',
 // 数据库的端口号,如果不设置,默认是3306
 port: '3306',
 // 创建数据库时设置用户名
 user: 'root',
 // 创建数据库时设置的密码
 password: '*******',
 // 创建的数据库
 database: 'express'
});
// 与数据库建立连接
connection.connect();
// 查询数据库
connection.query('select * from userinfo', function (error, results, fields) {
 if (error) throw error;
 console.log(results);
});

// 关闭连接
connection.end();

新建一张表格在数据库中为:

Node.js+Express+Mysql 实现增删改查

express服务端

Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,这里没有搭建express框架的项目,只是简单搭建一个服务端,实现和数据库的增删改查。

var express = require("express");
var app = express();
var query = require('./db')
//var router =require('router')
var mysql = require('mysql');
var querystring = require("querystring");
//console.log(mysql)
// 连接数据库的配置
var connection = mysql.createConnection({
 // 主机名称,一般是本机
 host: 'localhost',
 // 数据库的端口号,如果不设置,默认是3306
 port: '3306',
 // 创建数据库时设置用户名
 user: 'root',
 // 创建数据库时设置的密码
 password: '1234567',
 // 创建的数据库
 database: 'express'
});
// 与数据库建立连接
connection.connect();
//根据参数,查询数据
app.get('/index', function (req, res) {
 // 处理 get 请求,获取 get 请求参数
 //处理 /:xxx 形式的 get 或 post 请求,获取请求参数 这里没有使用到
 var params = req.query
 //查询语句
 var sql = 'select * from userinfo where name= ? and age=?'
 var where_value = [params.name, params.age];
 // console.log(sql)
 connection.query(sql, where_value, function (err, result) {
 if (err) {
  console.log('[SELECT ERROR]:', err.message);
 }
 res.send(result) //数据库查询结果返回到result中,把查询数据发送到客户端
 });

})
//增加数据
app.post('/add', function (req, res) {
 //获取及处理增加的数据
 var post = '';
 req.on('data', function (chunk) {
 post += chunk;
 console.log(post)
 });
 req.on('end', function () {
 //查询参数解析
 post = querystring.parse(post);
 var sql = 'insert into userinfo set id=? , name=? , age=?, address=?'
 var add_value = [post.id, post.name, post.age, post.address]
 connection.query(sql, add_value, function (err, result) {
  if (err) {
  console.log('新增数据失败');
  }
  res.send('增加数据成功') // 响应内容 增加数据成功
 });
 });
})
//修改数据
app.put('/update', function (req, res) {
 //处理请求修改的数据和条件
 var update = '';
 req.on('data', function (chunk) {
 update += chunk;
 console.log(update)
 });
 req.on('end', function () {
 //查询参数解析
 update = querystring.parse(update);
 var sql = 'update userinfo set name=? , age=?, address=? where id=?'
 var update_value = [update.name, update.age, update.address,update.id]
 connection.query(sql, update_value, function (err, result) {
  if (err) {
  console.log('修改数据失败', err.message);
  }
  res.send('修改数据成功') // 响应内容 修改数据成功
 });
 });
})
//删除数据
app.delete('/delete', function (req, res) {
 var params = req.query
 var sql = 'delete from userinfo where name= ?'
 var where_value = [params.name];
 // console.log(sql)
 connection.query(sql, where_value, function (err, result) {
 if (err) {
  console.log('删除失败', err.message);
 }
 res.send('删除成功')
 });
})
//关闭连接 
//connection.end();
//监听8080端口
var server = app.listen(8080, function () {
 console.log('server running at 3000 port')
})

http客户端

这里把node http模块来搭建客户端,发起请求。

get请求

const http = require("http");
// 发送请求的配置
let config = {
 host: "localhost",
 port: 8080,
 //get请求参数
 path:'/index?name=bill&age=21',
 method: "GET",
 headers: {
 a: 1
 }
};
// 创建客户端
let client = http.request(config, function(res) {
 // 接收服务端返回的数据
 let repData='';
 res.on("data", function(data) {
 repData=data.toString()
 console.log(repData)
 });
 res.on("end", function() {
 // console.log(Buffer.concat(arr).toString());
 });
});
// 发送请求
client.end();

客户端发起参数name=bill&age=21的查询请求,服务端根据条件操作数据库,响应数据为:

Node.js+Express+Mysql 实现增删改查

post请求

var http = require('http');
var querystring = require("querystring");
//查询参数拼接
//增加的数据
var contents = querystring.stringify({
 id:5,
 age:'23',
 name: "艾利斯提",
 address: "dongbei",
});
var options = {
 host: "localhost",
 port: 8080,
 path:"/add",
 method: "POST",
 headers: {
 "Content-Type": "application/x-www-form-urlencoded",
 "Content-Length": contents.length
 }
};
var req = http.request(options, function (res) {
 res.setEncoding("utf8");
 res.on("data", function (data) {
 console.log(data);
 })
})
//发送数据
req.write(contents);
req.end(); //结束请求,否则服务器将不会收到信息

post请求发送增加数据,服务端根据请求,向数据库追加一条数据,响应客户端:增加数据成功。增加后的数据表:

Node.js+Express+Mysql 实现增删改查

put请求

const http = require("http");
var querystring = require("querystring");
//查询参数拼接
// 发送请求的配置
var contents = querystring.stringify({
 id:1,
 age:'25',
 name: "Sarah",
 address: "qingdao",
});
let config = {
 host: "localhost",
 port: 8080,
 path:'/update',
 method: "PUT",
 headers: {
 a: 1
 }
};
// 创建客户端
let client = http.request(config, function(res) {
 // 接收服务端返回的数据
 let repData='';
 res.on("data", function(data) {
 repData=data.toString()
 console.log(repData)
 });
 
});
 client.write(contents);
// 发送请求
client.end();

这里请求和post方法类似,服务端根据sql语句('update userinfo set name=? , age=?, address=? where id=?')修改数据库的内容,响应客户端:修改数据成功。修改后的数据表:

Node.js+Express+Mysql 实现增删改查

delete请求

const http = require("http");
// 发送请求的配置
let config = {
 host: "localhost",
 port: 8080,
 //删除数据的参数
 path:'/delete?name=bill',
 method: "DELETE",
 headers: {
 a: 1
 }
};
// 创建客户端
let client = http.request(config, function(res) {
 // 接收服务端返回的数据
 let repData='';
 res.on("data", function(data) {
 repData=data.toString()
 console.log(repData)
 });
 res.on("end", function() {
 // console.log(Buffer.concat(arr).toString());
 });
});
// 发送请求
client.end();

客户端发送删除数据的参数,客户端拿到参数,根据条件,操作数据库删除相应数据,响应客户端:删除成功。删除后的数据表:

Node.js+Express+Mysql 实现增删改查

总结

接触后端的内容后,从后端的角度重新理解了前端数据的传输和操作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
设置下载不需要倒计时cookie(倒计时代码)
Nov 19 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
Nov 15 Javascript
JS设置获取cookies的方法
Jan 26 Javascript
JavaScript中的typeof操作符用法实例
Apr 05 Javascript
jQuery中prevAll()方法用法实例
Jan 08 Javascript
使用JavaScript开发IE浏览器本地插件实例
Feb 18 Javascript
jquery判断密码强度的验证代码
Apr 22 Javascript
JQuery datepicker 用法详解
Dec 25 Javascript
BootStrap中
Dec 10 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
Jan 26 Javascript
JavaScript实现鼠标点击导航栏变色特效
Feb 08 Javascript
微信小程序如何使用云开发
May 17 Javascript
微信小程序配置服务器提示验证token失败的解决方法
Apr 03 #Javascript
js前端面试之同步与异步问题详解
Apr 03 #Javascript
详解JavaScript 为什么要有 Symbol 类型?
Apr 03 #Javascript
es6 filter() 数组过滤方法总结
Apr 03 #Javascript
基于Vue 实现一个中规中矩loading组件
Apr 03 #Javascript
javascript实现小型区块链功能
Apr 03 #Javascript
vue插槽slot的理解和使用方法
Apr 03 #Javascript
You might like
PHP在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
php变量作用域的深入解析
2013/06/03 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
ucenter通信原理分析
2015/01/09 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
JavaScript基础语法之js表达式
2016/06/07 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
Python素数检测的方法
2015/05/11 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python和c语言的主要区别总结
2019/07/07 Python
AUC计算方法与Python实现代码
2020/02/28 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
银行实习生的自我评价
2013/12/09 职场文书
四年级语文教学反思
2014/02/05 职场文书
篮球比赛策划方案
2014/06/05 职场文书
服务理念标语
2014/06/18 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
nginx配置之并发频次限制
2022/04/18 Servers