前言
(一)、Web
Web的开发体系中,分成前端,后端,工具,三个主要的领域。
前端主要由由浏览器,HTML+CSS+浏览器端JS完成。
后端主要是由Web服务器,数据库,动态脚本语言,其它的业务服务器等组成。
还有就是很多基础设计与便利资料,我们可以统称为工具。比如源码管理,编辑器,数据库备份,加密,解密,防火墙等一系列的工具。
(二)、Node
Node是后端;node本质上是一个javascript运行环境,目的是让javascript可以实现在服务器上的开发,其本身不属于前端,但是属于前端的技术栈,即可以服务于前端,也可以服务于后端。
Node一开始只是服务器端的js,但是现在的说法是node.js已经是js的一个运行时了。它的核心是event driven, non blocking I/O,以及主要由npm构建的模块体系。
node.js是js的运行环境,即可以服务于前端,也可以服务于后端。
一、前期准备
(一)、安装node和express
安装node和express
// 全局安装
npm install express -g
npm install -g express-generator
// ps: 4.0版本把generator分离出来了,需要单独安装
(二)、安装MySQL和navicat
此处省略,后续可能更新
二、创建项目
(一)、创建命令
express 项目名称
cd 项目名称
npm install
npm install mysql --save  // 安装数据库
npm start // 一般访问:http://localhost:3000/
(二)、数据库操作
创建数据库以及创建表(我的是info),具体操作省略,后续可能更新

给表添加几条数据

(三)代码
1、连接池
连接池是在Nodejs中管理数据库连接的一种常见技术。
连接池可以提高应用程序的性能和可扩展性,通过重复使用已经建立的数据库连接,减少了每次请求都创建和销毁连接的开销。
在使用连接池时,释放连接是一个重要的操作,以确保连接资源得到正确管理和回收。
express项目新建文件夹utils,新建文件dbconfig.js
const mysql = require('mysql')
module.exports = {
    // 数据库配置
    config: {
        host: 'localhost', // 连接地址
        port: '3306', //端口号
        user: 'root',  //用户名
        password: '******', //密码
        database: 'user', //数据库名
    },
// 连接数据库,使用mysql的连接池连接方式
// 连接池对象
sqlConnect: function (sql, sqlArr, callBack) {
        var pool = mysql.createPool(this.config)
        pool.getConnection((err, conn) => {
            console.log('12345')
            if (err) {
                console.log('连接失败');
                return;
            }
            // 事件驱动回调
            conn.query(sql, sqlArr, callBack);
            //释放连接
            conn.release();
        })
    }
}
2、测试数据库是是否连接成功
routers>index.js文件下测试:
var express = require("express");
var router = express.Router();
var dbCongif = require("../utils/dbconfig");
/* GET home page. */
router.get("/", function (req, res, next) {
  var sql = "select * from info";
  var sqlArr = [];
  var callBack = (err, data) => {
    if (err) {
      console.log("连接出错了");
    } else {
      res.send({
        list: data,
      });
    }
  };
  dbCongif.sqlConnect(sql, sqlArr, callBack);
  // res.render('index', { title: 'Express' });
});
module.exports = router;
执行命令npm start或者node app.js重启项目,连接成功
访问 http://localhost:3000/

返回数据表示成功
(三)、使用npm run dev启动node项目
npm install -g node-dev或npm install node-dev -D
然后在package.json里加上"dev": "node-dev ./bin/www"
启动:npm run dev 再更新代码就不需要重启了。

(四)、vue访问node接口
1、创建一个vue项目配置跨域
vue2或者vue3都可以,因为此时端口或者ip地址可能不同,前端需要跨域配置
vue.config.js
const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({
  devServer: {
    proxy: {
      "/api": {
        target: "http://127.0.0.1:3000", //node.js服务器运行的地址
        ws: true,
        changeOrigin: true,
        pathRewrite: {
          "^/api": "", //路径重写
        },
      },
    },
  },
});
2、发起请求
没有axios,要先安装:npm install axios
mounted() {
    axios.get("/api/users").then((res) => {
      console.log(res);
    });
  },
访问成功
参考文章:
node(express.js创建项目)+连接mysql数据库_node mysql创建数据库-CSDN博客
Navicat工具使用-CSDN博客
问题以及解决办法
(一)、连接失败

报错信息:
{
  code: 'ER_NOT_SUPPORTED_AUTH_MODE',
  errno: 1251,
  sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
  sqlState: '08004',
  fatal: true
}报错原因:mysql版本太新了,MySQL8.0和MySQL5.0的加密方式不一样,连接会报错
解决办法:
1、cmd方式登录数据库
win+R打开cmd,输入mysql -u root -p
 如果提示不是内部命令,需要先配置环境变量
 配置环境变量:



双击path,找到我们安装MySQL的位置,我的在C盘,一直找到bin这个文件,复制该路径,我的复制下来就是C:\Program Files\MySQL\MySQL Server 8.0\bin,然后新增环境变量就行


后续输入:mysql -u root -p,看到以下界面,输入密码可以进入(密码就是数据库密码,一般123456)

2、更改mysql加密方式
执行SQL查询用户信息
select User,Host,Plugin from mysql.user;

输入:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
更新密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
(我用的还是123456)

刷新
FLUSH PRIVILEGES;
再次查询用户信息:

退出:exit




















