1 navcat链接数据库
1-1 准备工作
里面有Apache htdocs MySQL
Apache 打开80端口
htdocs 存放请求的资源
MySQL 数据库
1-2 MYSQL
1-2-1数据库的结构关系
库 > 表 > 列(字段)和行(数据)
每一个表都有一个id的字段,该字段是该表的主键,并且一般来说会不为空并自动自增。
1-2-2数据类型
* int 整型(整数数字)
* float 浮点型(小数)
* varchar 字符型(字符串)
* date 日期(YYYY-MM-DD)
* datetime 日期时间(YYYY-MM-DD HH:MM:SS)
1-2-3 SQL语句
<!-- 查数据表内所有数据 -->
SELECT * FROM 表名
<!-- 查根据条件查询数据 -->
SELECT * FROM 表名 WHERE 字段名=某值
SELECT * FROM 表名 WHERE 字段名=某值 AND 字段名=某值
SELECT * FROM 表名 WHERE 字段名=某值 OR 字段名=某值
<!-- 根据某个字段名进行排序 -->
SELECT * FROM 表名 ORDER BY 字段名
<!-- 根据某个字段名进行反向排序 -->
SELECT * FROM 表名 ORDER BY 字段名 DESC
<!-- 删除表内所有数据 -->
DELETE FROM 表名
<!-- 查根据条件删除数据 -->
DELETE FROM 表名 WHERE 字段名=某值
<!-- 插入新数据 -->
INSERT INTO 表名 (字段名1,字段名2,字段名3,....) VALUES (值1,值2,值3,.....)
<!-- 根据条件修改数据 -->
UPDATE 表名 SET 字段名=某值,字段名=某值.... WHERE 字段名=某值
2 node.js 操作数据库
2-1 模块
模块:用require()
引入的一个对象;一类是系统模块,还有一类是第三方模块。
2-2 fs模块–fs.writeFile(file, data[, options], callback)
let fs = require("fs");
// 异步写入
fs.writeFile("路径","写入的数据",function(err){
})
// 异步读取
error //读取失败
data //读取的数据
// data读取到的是2进制数据文件
fs.readFile("test.txt",function(error,data){
if(error){
console.log("读取失败")
return;
}
console.log(String(data))
})
2-3 第三方模块下载的方法
将npm下载地址切换为国内淘宝镜像:npm config set registry http://registry.npm.taobao.org
下载安装第三方模块:npm install 模块名 --save
第三方模块官网集合:https://www.npmjs.com/
2-4 express(第三方模块)
let server = require("express")();
require("express")这个东西是一个函数。
require("express")()这个东西返回一个对象。
// 计划监听来自前端的HTTP请求,如果请求地址是/a,则自动调用第二个参数的函数体
// get两个参数 第一个参数是字符串
server.get("/a",function(request,response){
// request.query来自前端请求的所带参数的对象
// 接收到来自前端的请求name参数,并赋值到name变量中
let name = request.query.name;
console.log("接收到来自前端的请求")
// 向前端返回一段内容
response.end() //有可能乱码,改用send();
response.send(`${name},success!!!!`)
})
// 真正将上面的计划执行监听到本机的81端口上。
server.listen(81)
let server = require("express")();
let fs = require("fs");
let mysql = require('mysql');
// 规划链接
let sql = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
database: 'tech'
});
// 尝试链接
sql.connect();
// 计划监听来自前端的HTTP请求,如果请求地址是/a则自动调用第二个参数的函数体
server.get("/a", function (request, response) {
// 接收到来自前端的请求name参数,并赋值到name变量中
let name = request.query.name;
console.log("接收到来自前端的请求")
// 向前端返回一段内容
response.send(`${name},success!!!!`)
})
// 计划监听来自前端的HTTP请求,如果请求地址是/a则自动调用第二个参数的函数体
server.get("/b", function (request, response) {
console.log("接收到来自前端的请求")
// 向前端返回一段内容
response.end("ok!")
})
// 监听来自前端的studentsList路由请求
// 当接收到请求后使用fs模块的readFile方法去取服务器的students.json文件
// 并将其转换为字符串后向前端返回
server.get("/studentsList", function (request, response) {
fs.readFile("students.json", function (error, data) {
response.send(String(data))
// response.end(data) 读取的本地文件乱码
// response.send(data) 二进制文件,发送到前端会直接下载
// response.send(String(data)) 前端收到的是字符串,需要转换为杰森
})
})
// 操作的是数据库
// 接收到来自前端的queryStudent路由请求
// 并且接收来自前端请求的id参数
// 从数据中找到与id值相对应的那个学生信息并将其返回。
server.get("/queryStudent", function (request, response) {
// 接收到来自前端的请求id参数,并赋值到id变量中
let id = request.query.id;
// 执行sql任务
sql.query(`SELECT * FROM students WHERE id=${id}`, function (error, data) {
if (error) {
console.log(error)
} else {
response.send(JSON.stringify(data[0]))
}
})
})
// 真正将上面的计划执行监听到本机的81端口上。
server.listen(81)
2-5 mysql(第三方模块)
let mysql = require('mysql');
// 规划链接
let sql = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
database : 'tech'
});
// 尝试链接
sql.connect();
// 执行sql任务
//data数据从数据库拿到的是Json对象,向前端发送需要先转换成字符串
sql.query("SELECT * FROM students",function(error,data){
if(error){
console.log(error)
}
else{
console.log(data)
}
})
2-6 解决跨域 服务器反向代理代码
server.all("*",function(req,res,next){
//设置允许跨域的域名,*代表允许任意域名跨域
res.header("Access-Control-Allow-Origin","*");
//允许的header类型
res.header("Access-Control-Allow-Headers","content-type");
//跨域允许的请求方式
res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
if (req.method.toLowerCase() == 'options')
res.send(200); //让options尝试请求快速结束
else
next();
})
2-6 expresse-static:NodeJS环境中向前端提供静态服务的第三方模块,可以代替Apache
const server = require("express")();
const expressStatic = require("express-static")
const mysql = require('mysql');
const port = 8080;
// 拦截所有请求,并且声明静态请求目录
server.use(expressStatic(`${__dirname}/static`));
3 打开数据库文件出错
SET NAMES utf8mb4;删掉这句话
SET FOREIGN_KEY_CHECKS = 0;
/*
Navicat Premium Data Transfer
Source Server : heihei
Source Server Type : MySQL
Source Server Version : 50090
Source Host : localhost:3306
Source Schema : tech
Target Server Type : MySQL
Target Server Version : 50090
File Encoding : 65001
Date: 24/11/2020 17:58:01
*/
/*SET NAMES utf8mb4;删掉这句话*/
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for flights
-- ----------------------------
DROP TABLE IF EXISTS `flights`;
CREATE TABLE `flights` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`airNo` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`destination` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`DepTime` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`landTime` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY USING BTREE (`id`)
) ENGINE = MyISAM AUTO_INCREMENT = 37 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of flights
-- ----------------------------
INSERT INTO `flights` VALUES (7, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (11, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (12, 'CES2259', 'Lüliang (LLV)', '14:44 CST', '15:31 CST');
INSERT INTO `flights` VALUES (14, 'CES2259', 'Lüliang (LLV)', '14:44 CST', '15:31 CST');
INSERT INTO `flights` VALUES (15, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (16, 'CES2259', 'Lüliang (LLV)', '14:44 CST', '15:31 CST');
INSERT INTO `flights` VALUES (17, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (18, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (19, 'CES2259', 'Lüliang (LLV)', '14:44 CST', '15:31 CST');
INSERT INTO `flights` VALUES (20, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (21, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (22, 'CES2259', 'Lüliang (LLV)', '14:44 CST', '15:31 CST');
INSERT INTO `flights` VALUES (23, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (24, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (25, 'CES2259', 'Lüliang (LLV)', '14:44 CST', '15:31 CST');
INSERT INTO `flights` VALUES (26, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (27, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (28, 'CES2259', 'Lüliang (LLV)', '14:44 CST', '15:31 CST');
INSERT INTO `flights` VALUES (29, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (30, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (31, 'CES2259', 'Lüliang (LLV)', '14:44 CST', '15:31 CST');
INSERT INTO `flights` VALUES (32, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (33, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (34, 'CES2259', 'Lüliang (LLV)', '14:44 CST', '15:31 CST');
INSERT INTO `flights` VALUES (35, 'CES2321', 'Karamay (KRY)', '14:51 CST', '18:26 CST');
INSERT INTO `flights` VALUES (36, 'CES2259', 'Lüliang (LLV)', '14:44 CST', '15:31 CST');
SET FOREIGN_KEY_CHECKS = 1;