前言
(一)、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