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

一、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操作语句,敬请期待!有任何疑问的可以私聊我~

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上网的虫不叫网虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值