公司派我去作一个外省的项目, 这个项目人员比较紧缺因此我负责后端部分, 而且你们手头都有其余任务致使工做很辛苦, 这个项目里面使用的是nest
框架来编写后端代码, 因为同事都不在一块儿致使沟通不便仍是踩了不少坑的, 我但愿你们可以避开我踩过的坑因此编写这个系列文章。前端
咱们的项目要求操做gitlab
因此这里我也会详细介绍如何快速搭建一套gitlab平台
并调用它的api
, 以及docker
的简易操做, 还有typeorm
官网上没有举过的操做数据库的具体例子。node
因为我是从自学前端转全栈的, 我更理解没有服务端基础的同窗想知道什么, 因此这个系列文章也很适合没有后端开发经验
的前端同窗
由于相关知识我都会之前端听得懂的方式讲明白, 若是你也想了解nest
框架的话那我就带你研究。nginx
注: nest
的官网写的真的很不错, 但咱们这篇更偏实战。git
因为相关内容不少, 因此第一篇咱们只作最基本的功能, 以及gitlab
的搭建, 后面都会详细聊各类操做。docker
nest
nest
与koa
等框架都差很少,我不扯什么大的概念, 我们直接开始实战使用, 最后咱们再一块儿总结nest
到底有什么特色。数据库
node 与 npm 我们前端必备 很少说了npm
第一步: 全局安装cli
工具, 而且生成项目。json
$ npm i -g @nestjs/cli $ nest new 项目名
我这边初始了一个名为share
的工程, 让咱们以开发模式运行它, 下一章会介绍调试模式运行。后端
cd share yarn start:dev // 这样你每次作出改变代码能够当即生效
默认是3000端口能够访问:api
nest
有不少好用又智能的命令, 方便咱们建立一些模块, 命令我先列在这里, 后面你们能够来这边查看。
因为推荐把各个模块都放到 src/modules里面, 因此下面写的是完整的路径。
命令 | 效果 |
---|---|
nest g controller modules/名 | 创建控制器 |
nest g service modules/名 | 建立服务器 |
nest g module modules/名 | 建立模块 |
nest g guard 名 | 建立守卫 |
nest g interceptor 名 | 建立拦截器 |
咱们先建立一个users
控制器, 负责接受'xxxx/users' 相关的路由。
nest g controller modules/users
测试文件咱们先无论它, 这个xxxxxx.controller.ts
文件之后咱们专门用来处理路由
如何分配以及一些对参数的装饰器处理。
import { Controller, Get } from '@nestjs/common'; @Controller('users') export class UsersController { @Get() getUsersList() { return '获取用户列表'; } }
@Get()
这个装饰器就是接收get请求
的意思, 它是从@nestjs/common
获取的。getUsersList
这个函数名只是描述这个函数的用途便可。@Controller('users')
指定了路由的匹配。让咱们看看效果:
service
执行具体的操做 咱们固然不能用Controller
执行具体的操做, 须要service
这个小伙伴来执行了, 咱们仍然能够经过命令行建立它。
nest g service modules/users
import { Injectable } from '@nestjs/common'; @Injectable() export class UsersService { getUsersList(){ return [{ name:'张三', }, { name:'李四' }] } }
controller
调用service
share/src/modules/users/users.controller.ts
修改以下:
import { Controller, Get } from '@nestjs/common'; import { UsersService } from './users.service'; @Controller('users') export class UsersController { constructor( private readonly usersService: UsersService ) { } @Get() getUsersList() { return this.usersService.getUsersList(); } }
注意: 是在constructor
的参数里面声明的usersService
, 而且使用this.usersService
调用里面的方法。
nest
默认处理返回值类型为promise
的状况 nest
框架会自动把咱们返回给用户的promise
转换为具体的结果, 因此下面三种写法用户收到的返回值是相同的。
固然你也能够选择虚拟机
, 我这边是直接在腾讯云买了一个月的服务器, 这里要强调一点, gitlab
的搭建对配置是有要求的, 1核1G
会很卡的, 我配置的是2核4G
依然会出现卡顿的现象但勉强能够正常使用了, 个人是CentOS 7.6
。
docker
只会前端知识的同窗也没关系, docker
只是个工具而已, 你能够认为他是一种功能上相似cli
的插件, 你们把写好的代码与配置好的环境上传到docker
上面, 咱们就能够用它获取到一套有nginx
、MySQL
、 后端服务
、前端服务
的完整系统, 接下来咱们实战一下。
$ yum -y install docker-io
systemctl start docker $ docker version
启动以后你会看到两个版本信息, 客户端与服务端(C/S)架构的程序, 简单理解为你的操做也就是输入的命令与执行命令是分开的, 这样就能够作到你输入的命令指定某个特定的server
执行, 这里不用过度纠结。
mkdir -p /etc/docker tee /etc/docker/daemon.json <<-‘EOF’ { "registry-mirrors":["https://fwvjnv59.mirror.aliyuncs.com"] } EOF
上面命令的意思就是把 内容插入到daemon.json
里面。
docker
下载gitlab
镜像 上面说的docker
配置弄完后, 咱们就能够用使用它来拉取gitlab
的镜像了。
推荐先来官网看看docker搭建gitlab官网
上述代码咱们要改动一下:
sudo docker run --detach \ --hostname 服务器的ip地址 \ --publish 443:443 --publish 13800:80 --publish 13822:22 \ --name 随便命个名 \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
hostname
改为本身的服务器ip
。name
随便命名, 方便之后咱们用docker
管理。gitlab-ee
改为gitlab-ce
, 能够认为ce
是社区版, 足够咱们学习使用了。docker image ls
docker container ps
我把name
设为了"gitlab_lulu", 下一篇咱们会用到这个名字去设置gitlab-runner
。
当前还没法访问13800
端口, 须要去云控制台配置一下。
因为我没有单独搞防火墙因此直接在腾讯这里设置就好了, 若是是安装了防火墙的机器请执行下面的语句。
firewall-cmd --add-port=13800/tcp —-permanent firewall-cmd —-reload
等两分钟就能够访问你的服务器ip:13800
。
初始帐号是root, 密码你随便设置吧。
拉到最下面
设置周一是每周的第一天
实际开发中咱们确定不用root帐号开发, 咱们注册一个小号。
虽然现实注册成功, 可是你使用这个号仍然登陆不上去, 由于你还要用root经过如下帐号的注册申请。
作完这些就能够正常访问了。
下一篇咱们要修改gitlab的配置以及使用gitlab-runner, 使咱们的gitlab也能够走ci/cd流程, 而且正式开始调用gitlab的api,是否是也不是那么难, 接下来咱们也要进入nest
的正式开发了, 此次就是这样, 但愿和你一块儿进步。