写给初用Nestj做项目的你(初篇: 项目架构与前端零基础搭建gitlab)
事情是这样的
公司派我去做一个外省的项目, 这个项目人员比较紧缺所以我负责后端部分, 并且大家手头都有其他任务导致工作很辛苦, 这个项目里面使用的是nest
框架来编写后端代码, 由于同事都不在一起导致沟通不便还是踩了很多坑的, 我希望大家能够避开我踩过的坑所以编写这个系列文章。
我们的项目要求操作gitlab
所以这里我也会详细介绍如何快速搭建一套gitlab平台
并调用它的api
, 以及docker
的简易操作, 还有typeorm
官网上没有举过的操作数据库的具体例子。
由于我是从自学前端转全栈的, 我更理解没有服务端基础的同学想知道什么, 所以这个系列文章也很适合没有后端开发经验
的前端同学
因为相关知识我都会以前端听得懂的方式讲明白, 如果你也想了解nest
框架的话那我就带你研究。
注: nest
的官网写的真的很不错, 但我们这篇更偏实战。
第一篇要做的事
由于相关内容很多, 所以第一篇我们只做最基本的功能, 以及gitlab
的搭建, 后面都会详细聊各种操作。
一. 初始化nest
nest
与koa
等框架都差不多,我不扯什么大的概念, 咱们直接开始实战使用, 最后我们再一起总结nest
到底有什么特点。
node 与 npm 咱们前端必备 不多说了
第一步: 全局安装cli
工具, 并且生成项目。
$ npm i -g @nestjs/cli
$ nest new 项目名
我这边初始了一个名为share
的工程, 让我们以开发模式运行它, 下一章会介绍调试模式运行。
cd share
yarn start:dev // 这样你每次做出改变代码可以立即生效
默认是3000端口可以访问:
二. 快捷命令创建一切
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通过以下账号的注册申请。
做完这些就可以正常访问了。
end.
下一篇我们要修改gitlab的配置以及使用gitlab-runner, 使我们的gitlab也可以走ci/cd流程, 并且正式开始调用gitlab的api,是不是也不是那么难, 接下来我们也要进入nest
的正式开发了, 这次就是这样, 希望和你一起进步。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。