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 相关文章推荐
JavaScript入门之基本函数详解
Oct 21 Javascript
学习javascript面向对象 理解javascript原型和原型链
Jan 04 Javascript
浅谈JavaScript的全局变量与局部变量
Jun 10 Javascript
jQuery实现查找最近父节点的方法
Jun 23 Javascript
基于JavaScript实现跳转提示页面
Sep 24 Javascript
Javascript使用function创建类的两种方法(推荐)
Nov 19 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
May 08 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 Javascript
三步搞定:Vue.js调用Android原生操作
Sep 07 Javascript
JavaScript 数组去重详解
Sep 15 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
function.inc.php超越php
2006/12/09 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
详解weex默认webpack.config.js改造
2018/01/08 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python中Random和Math模块学习笔记
2015/05/18 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
Python多层装饰器用法实例分析
2018/02/09 Python
python如何实现内容写在图片上
2018/03/23 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
Python模块future用法原理详解
2020/01/20 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
Python插件机制实现详解
2020/05/04 Python
Python是怎样处理json模块的
2020/07/16 Python
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
土木工程专业自荐信
2013/10/04 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
超市仓管员岗位职责
2014/04/07 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书