node.js安装
官网下载地址: http://nodejs.cn/download/
按照需求下载,如需下载其他版本:
点击所有下载选项,修改url路由上的版本信息
安装: 一键安装,记住你的安装地址
配置环境变量:
1、直接搜索环境变量,点开编辑系统环境变量(系统属性-高级-环境变量)
2、系统变量–path–选中后点击编辑–新建–将安装地址复制进去–最后三个确认都要确认完
验证是否安装成功:
键盘win+R输入cmd命令行打开窗口,输入node -v查看nodejs版本,输入npm -v查看npm版本,显示版本号代表安装成功
node.js写接口
1、创建一个空文件夹demo
2、右键用vscode打开,点击终端新建一个终端
3、初始化项目 npm init,按需求填入信息或者一路回车
npm init
3、下载 express 框架、body-parser 解析post请求、
npm install express --save
npm install body-parser --save
4、新建app.js文件夹
var express = require('express')
var app = express();
// post请求的中间件(插件,专门用来解析表单 POST 请求体)
let bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
// post请求
app.post('/post', function (req, res) {
const data = req.body // 获取入参
// 对入参做操作......
const sendData = {
"status": 200,
"msg": "操作成功",
"data": ''
}
res.send(sendData)
})
// get请求
app.get('/get', function (req, res) {
const data = req.query// 获取入参
// 对入参做操作......
const sendData = {
"status": 200,
"msg": "操作成功",
"data": ''
}
res.send(sendData)
})
app.listen(9999,function(){
console.log('服务器启动了');
})
mysql安装
- 下载MySQL压缩包 https://dev.mysql.com/downloads/installer/
- 配置mysql:
1)解压zip文件
2)将解压后的压缩包文件放入路径(不要有中文路径)(这里我放在了D:下)
3)创建配置文件:在mysql安装目录下,创建一个my.ini配置文件,然后在里面添加以下内容(mysql安装目录要改成自己的)
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\mysql-8.0.32-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql-8.0.32-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
[mysqld]
#查询缓存
explicit_defaults_for_timestamp=true
[mysqld]
# 设置导入导出
secure-file-priv=D:\mysql-8.0.32-winx64\file
4)配置环境变量:在path中添加 D:\mysql-8.0.32-winx64\bin
- 初始化mysql数据库:
在mysql的bin目录下打开cmd,输入:mysqld --initialize-insecure - 安装mysql:
mysqld -install
执行完后将会出现Service successfully installed.的提示 - 启动mysql:
net start mysql
执行完后显示服务启动成功,到此服务器就配置就成功了
mysql常用命令
1、连接数据库:
mysql -u username -p password
2、显示所有库名:
show database;
3、选择库名:
use 库名;
4、查看所有表:
show tables;
5、创建一个库:
create database 库名 charset utf8;
6、删除一个库:
drop database 库名;
7、创建一个表:
create table user(
id int(11),
name varchar(25)
);
8、查看表结构:
desc 表名;
9、修改表名:
rename table stu to newstu;
10、删除表:
drop table 表名;
11、向表中插入数据
insert into newstu
(id,name)
values
(1,‘zhangsan’),
(2,‘lisi’),
(3,‘wangwu’);
11-2、导入数据
insert into test.goods
select id,name,count from shop.goods;
12、查看表中全部数据
select * from newstu;
13、清空表中全部数据
truncate newstu;
14、解决表乱码
首先看下命令窗口使用的是什么格式,一般为gbk;
set names gbk;
15、存储笔记存储日志信息
tee D:\1010.sql
16、修改表的数据
update newstu
set name=‘laoliu’
where id=3;
17、删除表的数据
delete from newstu
where id=3;
18、三大类型
数字型:
字符串型:
日期类型:
date–1000-01-01-9999-12-31
time—838:59:59-838:59:59
datetime–1000-01-01 00:00:00-9999-12-31 23:59:59
year—1901-2155
timestamp
时间列随时取出当前时间:
ts timestamp default CURRENT_TIMESTAMP
建表:
sns社交网站
会员表 member
主键id,用户名,性别,体重(KG),生日,工资,上次登录时间,个人简介
create table member(
id int unsigned auto_increment primary key,
username char(20) not null default ‘’,
gender char(1) not null default ‘’,
weight tinyint unsigned not null default 0,
birth date not null default ‘0000-00-00’,
salary decimal(8,2) not null default 0.00,
lastlogin int unsigend not null default 0,
intro varchar not null default ‘’
);
19、修改表
新增列:
alter table 表名 add username char(20) not null default ‘’;
alter table 表名 add gender char(1) after username not null default ‘’;
alter table 表名 add id int not null default 0 first;
删除列:
alter table 表名 drop username;
修改列类型:
alter table 表名 modify gender char(4) not null default ‘’;
修改列:
alter table 表名 change username newname char(10) not null default ‘’;
20、查询表
where 条件查询
group by 分组
having 筛选
order by 排序
limit 限制结果条数
基本查询练习:
查询主键为32的商品详情:
select * from goods where goods_id=32;
查出不属于栏目3的所有商品
select * from goods where cat_id!=3;(<>)
查询栏目4和栏目11的商品
select * from goods where cat_id=4 or cat_id=11;
select * from goods where cat_id in (4,11);
查询价格在100到500之间的商品
select * from goods where price between 100 and 500;
总结:in为集合内,between and为范围内,not in非集合
查询以诺基亚开头的手机
select * from goods where goods_name like ‘诺基亚%’;
总结:_匹配单个任意字符,%匹配任意
as重命名
面试题修改部分数据为底整数
update goods
set count=(count/10)*10
where count between 30 and 50;
查询计算函数:
max,min、sum、svg、count
select max(price) from goods;
select count(1) from goods;
分组计算:
select goods_id,sum(goods_number) from goods
group by goods_id;
重命名后having可以查出来
查询市场价大于销售价并且差值大于200的商品
select goods_name,(marketprice-price) as diffprice
from goods
where 1
having diffprice>200;
查出不及格数大于等于2门的人的平均成绩
select name,avg(score),sum(score<60) as gks
from result
group by name
having gks>=2;
21、排序 order by
放在group by/where/having后面
降序desc / 升序asc
22、分页 limit
limit a偏移量,b取出条目数
23、子查询
虚拟表
存在exists / 不存在not exists
24、查空 is not null / is null
25、两表全连接查询
select a.name,b.name from a,b where a.id=b.id; // 无null
26、左连接
a left join b on 条件
select a.name,b.name from a left join b on a.id=b.id; // a全查,b没有对应的id的话补null
27、右连接
b right join a on 条件(跟上面相同作用)
28、内连接
a inner join b in 条件 // 不满足条件的全去掉
node.js 分模块 mysql数据库查询封装
- 新建一个文件夹,打开终端,初始化一下(一路回车即可)
npm init
- 安装mysql、express、body-parser
npm i mysql express body-parser
- 在根目录下新建
1)app.js入口文件
2)config文件夹,用来写数据库配置和封装数据库查询的
3)router文件夹,用来将项目的接口分类
- app.js
// app.js
const express = require('express')
const app = express();
// 导入路由
const loginRouter = require('./router/login')
const tableRouter = require('./router/table')
// post请求 中间件(插件,专门用来解析表单 POST 请求体)
let bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
//引入路由
app.use('/api', loginRouter);// /api/xxxxx
app.use('/api', tableRouter);
var server = app.listen(9999, () => {
console.log('服务器启动了');
})
- config – db.config.js
// db.config.js
// 创建mysql连接
module.exports = {
host: '127.0.0.1', // 服务器地址
user: 'root', // mysql用户名称
password: '111111', // mysql用户密码
port: 3306, // 端口
database: 'demo1', // 数据库名称
}
- config – db.js
// db.js
// 封装 mysql 的语句执行方法
const mysql = require('mysql');
const dbConfig = require('./db.config');
module.exports = {
query: function(sql, params, callback) {
//每次使用的时候需要创建链接,数据操作完成之后要关闭连接
const connection = mysql.createConnection(dbConfig)
connection.connect(function(err) {
if (err) {
throw err
}
//开始数据操作
connection.query(sql, params, function(err, results, fields) {
if (err) {
connection.end(function(err) {
if (err) {
console.log('关闭数据库连接失败!')
throw err
}
})
throw err
}
//将查询出来的数据返回给回调函数
callback && callback(
results ? JSON.parse(JSON.stringify(results)) : null,
fields ? JSON.parse(JSON.stringify(fields)) : null
)
//停止链接数据库,必须在查询语句后,要不然一调用这个方法,就直接停止链接,数据操作就会失败
connection.end(function(err) {
if (err) {
console.log('关闭数据库连接失败!')
throw err
}
})
})
})
},
}
- route r-- login.js
// login.js
const express = require('express')
const db = require('../config/db')
const loginRouter = express.Router()
// 登录post接口
loginRouter.post('/login', function (req, res) {
const data = req.body // 获取入参
let selectSQL = "select userName,password from user where userName = '"+data.username+"' and password = '"+data.password+"'";
// 查询数据库
db.query(selectSQL, (err, data) => {
if (err) return console.log("查询失败");
if (data == '') {
res.send({
"status": -1,
"msg": "账号密码错误",
"data": ''
})
} else {
res.send({
"status": 200,
"msg": "登录成功!",
"data": ''
})
}
})
})
module.exports = loginRouter
- route r-- table.js
// table.js
const express = require('express')
const db = require('../config/db')
const tableRouter = express.Router()
// 查询商品列表post接口
tableRouter.post('/getList', function (req, res) {
const data = req.body // 获取入参
let selectSQL = `select * from t_table where title like "%${data.title}%" or content like "%${data.title}%"`;
// 查询数据库
db.query(selectSQL, (err, data) => {
if (err) return console.log("查询失败");
res.send({
"status": 200,
"msg": "操作成功",
"data": data
})
})
})
// 查询权限字典get接口
tableRouter.get('/getList', function (req, res) {
let selectSQL = `select * from t_role`;
// 查询数据库
db.query(selectSQL, (err, data) => {
if (err) return console.log("查询失败");
console.log("查询成功!");
res.send({
"status": 200,
"msg": "操作成功",
"data": data
})
})
})
module.exports = tableRouter
- 启动服务
node app.js
- 到浏览器访问,可以正常显示接口结果,如下图: