REST API基于Express.jsmysql2的简单demo
Posted _less is more
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了REST API基于Express.jsmysql2的简单demo相关的知识,希望对你有一定的参考价值。
1、启动mysql
docker run --rm -d -v "C:/Users/ASUS/Desktop/db":/var/lib/mysql -p 3306:3306 -e MYSQL_USER=user -e MYSQL_ROOT_PASSWORD=mypassword -e MYSQL_PASSWORD=mypassword -e MYSQL_DATABASE=testdb mysql:latest --default-authentication-plugin=mysql_native_password
桌面下的db文件夹会自动创建
进入MySQL
docker exec -it 68 bash
注:container删除后数据库文件依然会在桌面的db文件夹下,只需要下次运行mysql时指定同样的映射目录即可,不过上面的docker run得改一下
docker run --rm -d -v "C:/Users/ASUS/Desktop/db":/var/lib/mysql -p 3306:3306 -e MYSQL_USER=user -e MYSQL_ROOT_PASSWORD=mypassword -e MYSQL_PASSWORD=mypassword mysql:latest --default-authentication-plugin=mysql_native_password
即去掉自动创建testdb数据库那一句,不然之前创建过了,会导致数据库创建失败启动不了container
2、以root身份进入mysql
mysql -uroot -pmypassword
3、创建一个数据库
CREATE DATABASE freedbtech_language;
查看
show databases;
可以看到testdb和刚创建的freedbtech_language都在
也可以这样查
show databases like ‘free%’;
4、创建表schema
首先进入数据库
use freedbtech_language;
创建schema
CREATE TABLE programming_languages
(
id INT(11) NOT NULL auto_increment ,
name VARCHAR(255) NOT NULL ,
released_year INT NULL ,
githut_rank INT NULL ,
pypl_rank INT NULL ,
tiobe_rank INT NULL ,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
updated_at DATETIME on UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT
CURRENT_TIMESTAMP ,
PRIMARY KEY (id),
UNIQUE idx_name_unique (name(255))
)engine = innodb charset=utf8mb4 COLLATE utf8mb4_general_ci;
查看表
show tables;
查看表schema
describe programming_languages;
插入数据
INSERT INTO
programming_languages(id,name,released_year,githut_rank,pypl_rank,tiobe_rank)
VALUES
(1,'javascript',1995,1,3,7),
(2,'Python',1991,2,1,3),
(3,'Java',1995,3,2,2),
(4,'TypeScript',2012,7,10,42),
(5,'C#',2000,9,4,5),
(6,'php',1995,8,6,8),
(7,'C++',1985,5,5,4),
(8,'C',1972,10,5,1),
(9,'Ruby',1995,6,15,15),
(10,'R',1993,33,7,9),
(11,'Objective-C',1984,18,8,18),
(12,'Swift',2015,16,9,13),
(13,'Kotlin',2011,15,12,40),
(14,'Go',2009,4,13,14),
(15,'Rust',2010,14,16,26),
(16,'Scala',2004,11,17,34);
查看刚插入的数据
select * from programming_languages;
5、demo参考来源
https://github.com/geshan/programming-langugages-api
但修改了一些代码,本demo源码见末尾
6、启动项目
先npm i
通过npx 来使用nodemon,也会下载nodemon到内存,但不会安装到node_modules,可以免去额外引入包的麻烦
npx nodemon@latest index.js
7、请求api
- 可以用VScode的REST插件
route.rest文件
###
GET http://localhost:3000/programming-languages/?page=1
###
POST http://localhost:3000/programming-languages
Content-Type: application/json
"name":"dart",
"released_year": 2011,
"githut_rank": 13,
"pypl_rank": 20,
"tiobe_rank": 25
###
PUT http://localhost:3000/programming-languages/17
Content-Type: application/json
"name":"Matlab",
"released_year": 1970,
"githut_rank": 100,
"pypl_rank": 100,
"tiobe_rank": 100
###
DELETE http://localhost:3000/programming-languages/1
- 也可以用curl
-i表示输出时将http的响应头也加上
-X指定用POST/GET请求
-H表示请求头
–data则是body的数据
POST
curl -i -X POST -H 'Accept: application/json' -H 'Content-type: application/json' http://localhost:3000/programming-languages --data '"name":"dart", "released_year": 2011, "githut_rank": 13, "pypl_rank": 20, "tiobe_rank": 25'
PUT
curl -i -X PUT -H 'Accept: application/json' -H 'Content-type: application/json' http://localhost:3000/programming-languages/17 --data '"name":"dart", "released_year": 2011, "githut_rank": 12, "pypl_rank": 20, "tiobe_rank": 25'
DELETE
curl -i -X DELETE -H 'Accept: application/json' -H 'Content-type: application/json' http://localhost:3000/programming-languages/17
GET
curl -i -X GET -H 'Accept: application/json' -H 'Content-type: application/json' http://localhost:3000/programming-languages/?page=1
但以上代码在powershell和cmd中运行会报不同程度的错,无法正常运行,但在git bash中是可以正常运行的
- 还可以用图形界面,源码都在最后
可以看到edit delete 以及post的表单
8、源码
https://github.com/lujiazho/nodejs-demos/tree/main/REST-API-demo
以上是关于REST API基于Express.jsmysql2的简单demo的主要内容,如果未能解决你的问题,请参考以下文章
创建与基于 REST 的 API 的 Microsoft Access 数据库连接
怎样更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现
将 ZIP 文件发送到基于 REST 的 API,该 API 使用基于 Flutter 的移动应用程序托管在 AWS 上的 SSL TLS (https)