寫給初用Nestj作項目的你(初篇: 項目架構與前端零基礎搭建gitlab)

寫給初用Nestj作項目的你(初篇: 項目架構與前端零基礎搭建gitlab)

事情是這樣的

     公司派我去作一個外省的項目, 這個項目人員比較緊缺因此我負責後端部分, 而且你們手頭都有其餘任務致使工做很辛苦, 這個項目裏面使用的是nest框架來編寫後端代碼, 因爲同事都不在一塊兒致使溝通不便仍是踩了不少坑的, 我但願你們可以避開我踩過的坑因此編寫這個系列文章。前端

     咱們的項目要求操做gitlab因此這裏我也會詳細介紹如何快速搭建一套gitlab平臺並調用它的api, 以及docker的簡易操做, 還有typeorm官網上沒有舉過的操做數據庫的具體例子。node

     因爲我是從自學前端轉全棧的, 我更理解沒有服務端基礎的同窗想知道什麼, 因此這個系列文章也很適合沒有後端開發經驗前端同窗由於相關知識我都會之前端聽得懂的方式講明白, 若是你也想了解nest框架的話那我就帶你研究。nginx

     注: nest的官網寫的真的很不錯, 但咱們這篇更偏實戰。git

第一篇要作的事

     因爲相關內容不少, 因此第一篇咱們只作最基本的功能, 以及gitlab的搭建, 後面都會詳細聊各類操做。docker

一. 初始化nest

     nestkoa等框架都差很少,我不扯什麼大的概念, 我們直接開始實戰使用, 最後咱們再一塊兒總結nest到底有什麼特色。數據庫

node 與 npm 我們前端必備 很少說了npm

第一步: 全局安裝cli工具, 而且生成項目。json

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

     我這邊初始了一個名爲share的工程, 讓咱們以開發模式運行它, 下一章會介紹調試模式運行。後端

cd share

yarn start:dev  // 這樣你每次作出改變代碼能夠當即生效

默認是3000端口能夠訪問:
image.pngapi

二. 快捷命令建立一切

     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的正式開發了, 此次就是這樣, 但願和你一塊兒進步。

相關文章
相關標籤/搜索