---
# System prepended metadata

title: 學習 NESTJS feat Part 16
tags: [TypeScript, TypeORM, cookieSession_Nest, Nestjs, Project]

---

學習 NESTJS feat Part 16
===
![](https://i.imgur.com/1fldI8k.png)


---
###### tags: `cookieSession_Nest`,`Nestjs`,`TypeScript`,`TypeORM`,`Project`

<br>

設定 /signout 之前 我們可以先設立一個確認這個用戶到底有沒有登入：

![](https://i.imgur.com/ZJbrcK3.png)

上面的 /whoami 就是在DB檢查用戶是否在登入中。
終於@CurrentUser 這個Gate我們需在 users 的檔案底下設立：
decorators > current-user.decorator.ts 這樣
![](https://i.imgur.com/fiD2koq.png)

***

![](https://i.imgur.com/nngLnaw.png)

在這裏我們看到新的功能叫 **createParamDecorator**，那什麽是 **createParamDecorator** 呢？

**createParamDecorator** 是一種工具方法，他可以用來創建自定義的參數裝飾器。
使用cPD 使得我們能夠在請求中處理特定的參數,及在控制器中進行相應的處理。

通常在需要在控制器( **Controller** ) 的處理函數 （ **handler Function**） 中獲取route的參數的值時使用。如果我們需要獲取HTTP link 的查詢參數（query Parameters），我們可以創建一個自定義參數裝飾器，然後將其應用于我們需要獲取查詢參數的控制器方法中，這樣在我們的處理函數中，我們就可以使用該參數裝飾器來獲取查詢參數值。

除了路由參數，我們還可以使用‘**createParamsDecorator**’獲取 HTTP 請求中的其他值，如請求頭（**request headers**）和請求正文（**request body**）

***

關於 **createParamsDecorator** 裏面的參數 **context：ExecutionContext** 記載的是當前HTTP請求的各種信息和對象，如請求的原始對象（'**request**'），響應的原始對象('**response**'),路由信息）（'**route**'）等等。

這裏context的對象還包含'**switchToHttp**'放啊，你可以使用這方法訪問到原始的'**request**'和'**response**'對象，從而可以直接操作 HTTP 請求和響應。
還可以使用'**switchToRpc**'方法來獲取RPC請求相關對象或使用'**switchToWs**'方法來獲取 WebSocket請求相關的對象。

***



回到users.controller 以後導入 CurrentUser 就完成可以看看現在登入的是哪位。

![](https://i.imgur.com/90i7e87.png)

剛剛在CurrentUsers return 'Hi there'，所以確認有人那就回傳這個。