当前位置: 首页 > news >正文

nodejs搭建服务篇章四:前端通过nodejs搭建的服务连接MySQL数据库中的数据(数据库安装,数据库管理,ajax查询数据),超多图超详细

  • nodejs搭建服务篇章一:nodejs搭建简易原生服务和基于express框架服务

  • nodejs搭建服务篇章二:nodejs搭建服务的路由目录分析及前端请求demo

  • nodejs搭建服务篇章三:nodejs搭建服务项目目录的简单介绍及app.js文件简单说明

  • nodejs搭建服务篇章四:前端通过nodejs搭建的服务连接MySQL数据库中的数据(数据库安装,数据库管理,ajax查询数据),超多图超详细

  • nodejs学习项目git开源地址:https://gitee.com/my_dear_li_pan/my-study-nodejs.git

  • 这个章节开始逐渐的学习nodejs服务连接访问MySQL数据库中的数据:

一、MySQL数据库的安装

  1. 什么是MySQL数据库?具体可以看菜鸟教程的MySQL教程
  2. 安装MySQL数据库:参考菜鸟教程的MySQL 安装,这里面linux/windows的安装教程都很详细,亲测有效。
  • 注意:在安装MySQL的时候,输入mysqld install安装命令的时候,可能会报错:Install/Remove of the Service Denied!
    image


    解决方案就是cmd以管理员身份运行,详细参考:https://jingyan.baidu.com/article/0eb457e54f1b0c43f1a9059e.html
  1. MySQL管理:参考菜鸟教程的MySQL 管理,在运行MySQL的时候遇到了一些坑:
  • 坑【1】: insert into user插入表的方式添加mysql数据库用户,执行相关命令的时候报错
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(‘lp123456’),‘y’,‘y’,‘y’)' at line 1

具体原因菜鸟教程下面的注意中有简单的说明,是因为下载的最新MySQL版本为5.7以上,比较详细的可以参考:https://blog.csdn.net/m0_47505062/article/details/109159668

  • 坑【2】:根据https://blog.csdn.net/m0_47505062/article/details/109159668中的方法在MySQL8.0以上使用create user ‘myself’@‘localhost’ identified by ‘guest123’;创建用户报错:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '‘guest123’' at line 1

解决方案:


提示意思是不能用grant创建用户,mysql8.0以前的版本可以使用grant在授权的时候隐式的创建用户,mysql8.0以后已经不支持,所以必须先创建用户,然后再授权,命令如下:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
Query OK, 0 rows affected (0.48 sec)

mysql> grant all privileges on *.* to 'root'@'%';
Query OK, 0 rows affected (0.48 sec)

二、使用Navicat for MySQL管理MySQL数据库

  1. 首先安装Navicat for MySQL(内置安装说明):链接:https://pan.baidu.com/s/1q6Gc0Il4TuP3kAGriLlbeA
    提取码:1qux
  2. 安装之后启动链接的时候可能报错:1251 client does not support ...


    image


    解决方案: 参考:https://blog.csdn.net/u012604745/article/details/80632860

  • 首先查看用户信息:
    select host,user,plugin,authentication_string from mysql.user;


    image
  • 然后修改用户密码:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
更新user为root,host为% 的密码为123456

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
更新user为root,host为localhost 的密码为123456


image


3. 最后一步成功:

image
4. 链接成功后我新建了一个数据库lpdemo,然后添加了一个user表(后续使用):
image
5. 直到上面的所有步骤,已经把数据库准备好了,那么接下来回到nodejs中将进行数据库中的数据的简单获取。

三、实现前端通过ajax请求从nodejs搭建的服务查询获取数据库中的数据

在这里将从 前端页面=》app.js入口=》routes路由层=》controllers控制层=》models数据层=》数据库配置 这6个步骤反着来依次实现。

注意: 关于接下说的目录等介绍可以参考:nodejs搭建服务篇章三:nodejs搭建服务项目目录的简单介绍及app.js文件简单说明

  1. 创建3个文件夹config、controllers、models和分别对应的dbpool.js、user.js、user.js:

image

  1. 关于配置文件dbpool.js文件,在根目录输入npm install mysql --save命令安装mysql依赖(注意:必须要自行安装mysal依赖,不然会报错):
const mysql = require("mysql");
const dbPool = {
    pool: {},
    config: {
        host: "localhost",//主机地址
        port: "3306",//端口号
        user: "lp",//数据库用户
        password: "lp123456",//数据库密码
        database: "lpdemo" //表文件名(表的最外面)
    },
    create() {
        this.pool = mysql.createPool(this.config)
    },
    connect(sql, arr, fn) {//sql语句,参数,回调函数
        this.pool.getConnection((err, connection) => {
            connection.query(sql, arr, fn);
            connection.release();
        })
    }
};
dbPool.create();
module.exports = dbPool;

注意理解: 上面的配置是根据二中的第4点中的数据库来配置的,这个根据自身的情况。

  1. 关于models数据层中的user.js中的逻辑(与配置dbpool.js相关联):
const dbPool = require('../config/dbpool');
const modelsUser = {
	// 根据userid获取某个用户的信息
	userInfo(query){
		return new Promise((resolve,reject)=>{
			dbPool.connect("SELECT * FROM user WHERE userid=?", query.userid, (err, data) => {
				if (!err) {
					resolve({
						code: 200,
						list: data
					});
				} else {
					reject(err)
				}
			})
		})
	}
};
module.exports = modelsUser;
  1. 关于controllers控制层中的user.js中的逻辑(与models数据层相关):
const modelsUser = require('../models/user.js');
const constrollersUser = {
	async userInfo(req,res){
		let query=req.query;
		let userInfoRes = await modelsUser.userInfo(query);
		res.send(userInfoRes);
	}
};
module.exports = constrollersUser;
  1. 关于路由层中的users.js(与controllers控制逻辑层相关):
var express = require('express');
var router = express.Router();

const controllersUser=require('../controllers/user.js');

router.get('/getUserInfo',controllersUser.userInfo);

module.exports = router;

6.app.js中的注入(与routes路由层相关):

var usersRouter = require('./routes/users');

app.use('/user', usersRouter);

注意: 这里注入的写的是/user,路由层写的是/getUserInfo,意味着前端请求就需要用/user/getUserInfo来请求。这里一定要理解。

  1. 最后一步===========>前端页面的请求数据:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div>我是html中的内容</div>
		<script type="text/javascript" src="https://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>
		<script type="text/javascript">
			$.ajax({
				url:'/user/getUserInfo',
				data:{
					userid:1
				},
				success(res){
					console.log(res)
				}
			})
		</script>
	</body>
</html>

请求成功后输出的内容:

image


到这里nodejs的基础学习暂告一段落,后期还会学习一些简单的MySQL操作语句,敬请期待!有任何疑问的可以私聊我~
ole.log(res)
}
})

``` 请求成功后输出的内容:

[外链图片转存中…(img-ltb51Cui-1633935478410)]


到这里nodejs的基础学习暂告一段落,后期还会学习一些简单的MySQL操作语句,敬请期待!有任何疑问的可以私聊我~

相关文章:

  • XCode升级到7后,规范注释生成器VVDocumenter插件没有用了,怎么办?
  • vue传值处理:vue中父组件通过props传值给子组件,子组件表单控件使用值,子组件改变该值时如何避免报错
  • axios的二次封装:在vue中如何灵活运用axios请求,二次封装更加灵活,更多参数可配置
  • 清理C盘内存:电脑C盘飘红了,那么如何清理垃圾文件,总结几种亲测方案
  • Part05 - (图文)NSX系列之检查NSX Controller状态
  • JSON.parse转化:如何使得一个字符串类型‘false‘等于布尔类型的false(使‘1‘===1?成立的2种处理办法,与JSON.stringify的)
  • 常用工具函数推荐:前端开发常用的工具函数(拷贝、排序、防抖、去重、合并、时间处理、DOM操作...).md
  • 正则表达式校验文件路径
  • img制图技巧:给img图片添加背景颜色和背景图片,制作出新图片
  • 移动端h5页面click事件延迟300ms,出现该问题的原因分析及解决方案FastClick.js
  • ios移动端兼容:iPhone X等机型底部的安全距离样式的设置
  • js简单判断:js判断对象是否为{},js判断对象是否为null
  • Linux Pmap 命令:查看进程用了多少内存
  • HBuilder X运行uniapp之app真机调试控制台console不打印,多种原因分析解决,亲测有效
  • 开源项目推荐:推荐5款前端的开源项目,vue、uniapp、react学无止境用无止境_
  • @jsonView过滤属性
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【知识碎片】第三方登录弹窗效果
  • JAVA SE 6 GC调优笔记
  • Java 内存分配及垃圾回收机制初探
  • Javascript 原型链
  • Java多态
  • Java-详解HashMap
  • js 实现textarea输入字数提示
  • JWT究竟是什么呢?
  • magento2项目上线注意事项
  • mysql 5.6 原生Online DDL解析
  • mysql 数据库四种事务隔离级别
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Unix命令
  • 阿里云应用高可用服务公测发布
  • 聚簇索引和非聚簇索引
  • 聚类分析——Kmeans
  • 数据科学 第 3 章 11 字符串处理
  • 我的业余项目总结
  • 应用生命周期终极 DevOps 工具包
  • 用jquery写贪吃蛇
  • 自制字幕遮挡器
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 我们雇佣了一只大猴子...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #WEB前端(HTML属性)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (超详细)语音信号处理之特征提取
  • (顺序)容器的好伴侣 --- 容器适配器
  • (五)网络优化与超参数选择--九五小庞
  • (转)memcache、redis缓存
  • (转)ObjectiveC 深浅拷贝学习
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Reactor简单使用教程