23

写给初用Nestj做项目的你(初篇: 项目架构与前端零基础搭建gitlab)

事情是这样的

     公司派我去做一个外省的项目, 这个项目人员比较紧缺所以我负责后端部分, 并且大家手头都有其他任务导致工作很辛苦, 这个项目里面使用的是nest框架来编写后端代码, 由于同事都不在一起导致沟通不便还是踩了很多坑的, 我希望大家能够避开我踩过的坑所以编写这个系列文章。

     我们的项目要求操作gitlab所以这里我也会详细介绍如何快速搭建一套gitlab平台并调用它的api, 以及docker的简易操作, 还有typeorm官网上没有举过的操作数据库的具体例子。

     由于我是从自学前端转全栈的, 我更理解没有服务端基础的同学想知道什么, 所以这个系列文章也很适合没有后端开发经验前端同学因为相关知识我都会以前端听得懂的方式讲明白, 如果你也想了解nest框架的话那我就带你研究。

     注: nest的官网写的真的很不错, 但我们这篇更偏实战。

第一篇要做的事

     由于相关内容很多, 所以第一篇我们只做最基本的功能, 以及gitlab的搭建, 后面都会详细聊各种操作。

一. 初始化nest

     nestkoa等框架都差不多,我不扯什么大的概念, 咱们直接开始实战使用, 最后我们再一起总结nest到底有什么特点。

node 与 npm 咱们前端必备 不多说了

第一步: 全局安装cli工具, 并且生成项目。

$ npm i -g @nestjs/cli
$ nest new 项目名

     我这边初始了一个名为share的工程, 让我们以开发模式运行它, 下一章会介绍调试模式运行。

cd share

yarn start:dev  // 这样你每次做出改变代码可以立即生效

默认是3000端口可以访问:
image.png

二. 快捷命令创建一切

     nest有很多好用又智能的命令, 方便我们创建一些模块, 命令我先列在这里, 后面大家可以来这边查看。

由于推荐把各个模块都放到 src/modules里面, 所以下面写的是完整的路径。

命令效果
nest g controller modules/名建立控制器
nest g service modules/名创建服务器
nest g module modules/名创建模块
nest g guard 名创建守卫
nest g interceptor 名创建拦截器

三. 控制器

image.png

     我们先创建一个users控制器, 负责接受'xxxx/users' 相关的路由。

nest g controller modules/users

image.png

     测试文件我们先不管它, 这个xxxxxx.controller.ts文件以后我们专门用来处理路由如何分配以及一些对参数的装饰器处理。

import { Controller, Get } from '@nestjs/common';

@Controller('users')
export class UsersController {
    @Get()
    getUsersList() {
        return '获取用户列表';
    }
}
  1. @Get()这个装饰器就是接收get请求的意思, 它是从@nestjs/common获取的。
  2. getUsersList这个函数名只是描述这个函数的用途即可。
  3. @Controller('users')指定了路由的匹配。

让我们看看效果:

image.png

四. service执行具体的操作

     我们当然不能用Controller执行具体的操作, 需要service这个小伙伴来执行了, 我们仍然可以通过命令行创建它。

nest g service modules/users

image.png

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调用里面的方法。

image.png

五. nest默认处理返回值类型为promise的情况

     nest框架会自动把我们返回给用户的promise转换为具体的结果, 所以下面三种写法用户收到的返回值是相同的。
image.png
image.png
image.png

六. 需要一台服务器

     当然你也可以选择虚拟机, 我这边是直接在腾讯云买了一个月的服务器, 这里要强调一点, gitlab的搭建对配置是有要求的, 1核1G会很卡的, 我配置的是2核4G依然会出现卡顿的现象但勉强可以正常使用了, 我的是CentOS 7.6
image.png

七. 前端简单使用docker

     只会前端知识的同学也不要紧, docker只是个工具而已, 你可以认为他是一种功能上类似cli的插件, 大家把写好的代码与配置好的环境上传到docker上面, 我们就可以用它获取到一套有nginxMySQL后端服务前端服务的完整系统, 接下来我们实战一下。

第一步: 安装
$ yum -y install docker-io 
第二步: 启动 & 查看版本
systemctl start docker

$ docker version

     启动之后你会看到两个版本信息, 客户端与服务端(C/S)架构的程序, 简单理解为你的操作也就是输入的命令与执行命令是分开的, 这样就可以做到你输入的命令指定某个特定的server执行, 这里不用过分纠结。
image.png

第三步: 设置源加速
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官网
image.png

     上述代码我们要改动一下:

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
  1. hostname改成自己的服务器ip
  2. name随便命名, 方便以后我们用docker管理。
  3. gitlab-ee改成gitlab-ce, 可以认为ce是社区版, 足够我们学习使用了。
查看镜像
docker image ls

image.png

查看运行中的程序
docker container ps

image.png

我把name设为了"gitlab_lulu", 下一篇我们会用到这个名字去设置gitlab-runner

九. 开启安全组(这里演示腾讯云)

     当前还无法访问13800端口, 需要去云控制台配置一下。
image.png

image.png

image.png

     由于我没有单独搞防火墙所以直接在腾讯这里设置就行了, 如果是安装了防火墙的机器请执行下面的语句。

firewall-cmd --add-port=13800/tcp —-permanent 
firewall-cmd —-reload 

十. 初始密码, 设置中文环境

等两分钟就可以访问你的服务器ip:13800
image.png

初始账号是root, 密码你随便设置吧。

image.png

拉到最下面

image.png

设置周一是每周的第一天

image.png

十一. 注册小号, 并且审核通过

     实际开发中我们肯定不用root账号开发, 我们注册一个小号。
image.png

     虽然现实注册成功, 但是你使用这个号仍然登录不上去, 因为你还要用root通过以下账号的注册申请。

image.png

做完这些就可以正常访问了。

end.

     下一篇我们要修改gitlab的配置以及使用gitlab-runner, 使我们的gitlab也可以走ci/cd流程, 并且正式开始调用gitlab的api,是不是也不是那么难, 接下来我们也要进入nest的正式开发了, 这次就是这样, 希望和你一起进步。


lulu_up
5.7k 声望6.9k 粉丝

自信自律, 终身学习, 创业者