项目结构
重要的文件目前就这两个
bin/www
在
package.json
中,大家见过这个文件的配置。它是用来启动项目的文件,无需修改,也不用管它,知道它是干嘛的就好了。node_modules
展开后,会发现里面有非常多的文件。这就是当我们使用
npm i
命令后,安装的项目依赖包。我们也不用管它,甚至将它们删掉都没关系。因为当你再次运行npm i
后,它又会重新出现的。public 目录
这里放的各种静态资源,例如 CSS、图片等等静态资源。但因为我们项目是专门开发接口的,所以这里的东西,大家完全不需要管它,根本用不上。
routes
这里是程序的路由部分,路由简单的理解就是将不同网址,分别对应到不同的程序代码上去。咱们开发项目,最重要的就是这个目录了,后面我们开发要写的代码主要也都是在这里。
app.js
这个文件也很重要,在开发中,我们需要做一些路由的配置、跨域配置,都会来修改它的。
package.json
这里主要记录的是项目的基本信息,和一些依赖包的情况。
package-lock.json
最后一个是
package-lock.json
,它是用来锁定npm i
时,安装依赖包的版本号。并且将代码发给其他人后,保证其他人在npm i
时,所使用的依赖包版本号能一致。这个文件删掉后,运行npm i
也会自动重新生成的。
使用 Docker 运行 MySQL
安装Docker
附下载地址
进入控制面版打开服务,找不到Hyper-H就建一个Hyper.cmd文件
填写以下内容
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
执行完会自动重启,
选完后docker还是报错进不去,并且无法wsl --update,那试试在命令行输入
wsl --set-default-version 2
然后就可以了
配置镜像
进入后在设置配置下中国镜像
连接MySQL
在根目录下创建这个文件,并填入以下内容
services:
mysql:
image: mysql:8.3.0
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
environment:
- MYSQL_ROOT_PASSWORD=clwy1234
- MYSQL_LOWER_CASE_TABLE_NAMES=0
ports:
- "3306:3306"
volumes:
- ./data/mysql:/var/lib/mysql
然后就可以看见
遇到了无法Start的问题
报错为
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
通过这个博客解决了
端口被占用,检查占用进程是什么,进入cmd
>netstat -aon|findstr 3306
发现被6100PID的进程占用了,删除这个进程
taskkill /T /F /PID 3104
但是删了之后DataGrip无法连接数据库了,以后看看怎么办
成功启动
使用数据库
建表并插入数据
安装ORM
用ORM代替MySQL语句的编写
npm i -g sequelize-cli
npm i sequelize mysql2
sequelize init
在项目的cmd中依次执行上面三条指令
增加了上面四个文件夹
配置config
目前只用管开发环境的配置(改password和database即可)
新建models
直接用ORM命令建表
sequelize model:generate --name Article --attributes title:string,content:text
模型就是用来操作数据库的,就是因为有这个文件的存在,我们后面才能使用Article.all()
这种代码来查询数据。模型里还有一些其他的东西,我们暂时不用管它
migrations目录
它的作用就是用来创建、修改表的。看到这里,在up
部分。我们通过createTabel
,创建了一个叫做Articles
的表。
运行迁移
sequelize db:migrate
运行该命令,即可发现数据库也新建了一个表
seeders目录
可以快速填充我们需要的数据
sequelize seed:generate --name article
用该命令新建种子文件
文件分为两个部分,up
部分用来填充数据,down
部分是反向操作,用来删除数据的。
改一下up和down的内容
接着运行命令(xxx填自己的文件名)
sequelize db:seed --seed xxx-article