---
# System prepended metadata

title: 問題與解決

---

:::success
常用指令：
* `docker ps`：查看正在運行的容器
* `docker images`：查看已建立的影像檔
:::


:::info
* 問題
    ```
    "error": "13 INTERNAL: (psycopg2.OperationalError) connection to server at \"localhost\" (127.0.0.1), port 5432 
    failed: Connection refused\n\tIs the server running on that host and accepting TCP/IP connections?\nconnection to server at \"localhost\" (::1), port 5432
    failed: Cannot assign requested address\n\tIs the server running on that host and accepting TCP/IP connections?\n\n(Background on this error at: https://sqlalche.me/e/20/e3q8)"
    ```
    無法連接到port 5432
* 解決
    用 ` docker compose up` 啟動 postgres、member 兩個服務，如果用 docker build 只會啟動單一服務
    p.s. `-d` 可以在背景執行
:::

:::success
* 問題
    更新了 init.sql 但 table 欄位沒有確實更新
* 解決
因為資料庫已經初始化過了，它只會第一次建立 volume 時執行一次，所以要重新初始化資料庫
`docker compose down -v`
`docker compose up --build`
其他可以查詢資料庫table的指令
`docker exec -it member-postgres psql -U snai-dev -d member`：
`\dt`：列出目前資料庫中的所有table
`\d member`：列出member(table)中的欄位
`SELECT * FROM member;`：查看member這個table中有那些值
:::

:::info
* 生成secret key用的方法
* python -c "import secrets; print(secrets.token_urlsafe(32))"
:::

:::success
驗證email

目的：這個 Email 是屬於這個使用者的，且他真的收得到信。
流程：使用者註冊帳號後，後端會產生驗證 token（使用 generate_email_token(uid)），建立一個驗證連結，透過 Email 寄送這個連結給使用者， 使用者打開信件點擊驗證連結
前端會接收到網址中的 token 參數，將 token 傳送給後端 API，後端驗證 token
:::

:::info
用postman測試api步驟

1. 在一個bash下，/src/member資料夾執行 `docker compose up --build`
2. 在另一個bash下，/src/api-gateway執行`npm start`
3. 在postman輸入方法、網址、body內容即可看到回傳值
    ![image](https://hackmd.io/_uploads/H1eS-TuHgg.png)

:::




