曾經需要一個平台來管理您俱樂部的活動嗎?或者也許在您的辦公室安排會議?但在尋找價格實惠的平台時,您是否在眾多的選擇中迷失了方向?或者也許您只是想更好地安排您的生活並安排何時必須參加哪些活動?
按照這篇文章進行到底,您最終將獲得一個基本的事件調度 API,其中將提供事件創建和註冊等所有基本功能。
該專案的 GitHub 儲存庫位於 https://github.com/xerctia/gatherly
Express 是一個 Javascript 框架,用於設定和建立伺服器來處理各種類型的請求,如 GET、POST 等。 Express 是最常用的後端框架之一,也是初學者最容易上手的框架之一。在本部落格中,我們將使用 Express 來製作我們的伺服器並設定所需的端點。
PostgreSQL 是一個開源關聯式資料庫管理系統 (RDBMS),以其可靠性、可擴展性和對複雜查詢的支援而聞名。它提供了高級功能,例如對 JSON 資料的支援、全文搜尋和可擴展性,使其適用於小型專案和大型應用程式。 PostgreSQL 深受開發者歡迎,並因其強大的效能而受到重視。
網路上有許多 PostgreSQL 供應商允許使用 PostgreSQL 資料庫,有些是免費的,有些是付費方案。在這個專案中,我們將使用 Supabase 及其資料庫作為我們的 PostgreSQL。
const exp = require('express'); const cors = require('cors'); const app = exp(); const PORT = 3000 || process.env.PORT; app.use(express.json()); app.use(express.urlencoded({extended: true})); app.use(cors()); app.get("/", (req, res) => { res.send("Hello, Gatherly!"); }) app.listen(PORT, () => { console.log(`server started on ${PORT}`); })
恭喜!您已成功在 Express 中設定基本伺服器!
const exp = require('express'); const cors = require('cors'); const app = exp(); const PORT = 3000 || process.env.PORT; app.use(express.json()); app.use(express.urlencoded({extended: true})); app.use(cors()); app.get("/", (req, res) => { res.send("Hello, Gatherly!"); }) app.listen(PORT, () => { console.log(`server started on ${PORT}`); })
CREATE TABLE events ( id SERIAL PRIMARY KEY, title VARCHAR(255) NOT NULL, description TEXT, start_time TIMESTAMP NOT NULL, end_time TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
DATABASE_URL="postgresql://username:password@host:port/dbname"
const { Pool } = require('pg'); require('dotenv').config(); const pool = new Pool({ connectionString: process.env.DATABASE_URL, ssl: { rejectUnauthorized: false } }); module.exports = pool;
恭喜,您已成功將 Supabase 資料庫連接到 index.js 檔案。我們現在準備開始建立實際的 API 端點。
const exp = require('express'); const cors = require('cors'); const app = exp(); const PORT = 3000 || process.env.PORT; app.use(express.json()); app.use(express.urlencoded({extended: true})); app.use(cors()); app.get("/", (req, res) => { res.send("Hello, Gatherly!"); }) app.listen(PORT, () => { console.log(`server started on ${PORT}`); })
CREATE TABLE events ( id SERIAL PRIMARY KEY, title VARCHAR(255) NOT NULL, description TEXT, start_time TIMESTAMP NOT NULL, end_time TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
DATABASE_URL="postgresql://username:password@host:port/dbname"
const { Pool } = require('pg'); require('dotenv').config(); const pool = new Pool({ connectionString: process.env.DATABASE_URL, ssl: { rejectUnauthorized: false } }); module.exports = pool;
const pool = require('./db');
app.get('/events', async (req, res) => { // code to be written })
try { // code to be written } catch (e) { console.error(e); res.status(500).json({error: "Database error."}); // 500 = Internal Server Error }
const result = await pool.query("SELECT * FROM events");
res.status(200).json(result.rows); // 200 = OK
app.get('/events', async (req, res) => { try { // Getting all events const result = await pool.query("SELECT * FROM events"); res.status(200).json(result.rows); // 200 = OK } catch (e) { console.error(e); res.status(500).json({error: 'Database error'}); // 500 = Internal Server Error } })
app.post("/events", async (req, res) => { try { // code to be written } catch (e) { console.error(e); res.status(500).json({error: "Failed to create event."}); // 500 = Internal Server Error } })
這也可以在 try-catch 之外完成,就像前一個端點中的輸入值一樣。
const exp = require('express'); const cors = require('cors'); const app = exp(); const PORT = 3000 || process.env.PORT; app.use(express.json()); app.use(express.urlencoded({extended: true})); app.use(cors()); app.get("/", (req, res) => { res.send("Hello, Gatherly!"); }) app.listen(PORT, () => { console.log(`server started on ${PORT}`); })
CREATE TABLE events ( id SERIAL PRIMARY KEY, title VARCHAR(255) NOT NULL, description TEXT, start_time TIMESTAMP NOT NULL, end_time TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
DATABASE_URL="postgresql://username:password@host:port/dbname"
要實現此功能,您需要先在 Supabase 中建立一個新表。
前往 SQL 編輯器並執行以下查詢:
const { Pool } = require('pg'); require('dotenv').config(); const pool = new Pool({ connectionString: process.env.DATABASE_URL, ssl: { rejectUnauthorized: false } }); module.exports = pool;
const pool = require('./db');
app.get('/events', async (req, res) => { // code to be written })
try { // code to be written } catch (e) { console.error(e); res.status(500).json({error: "Database error."}); // 500 = Internal Server Error }
const result = await pool.query("SELECT * FROM events");
這是給你們的作業。 (別生氣,如果你嘗試了還是不行,GitHub 程式碼總是可用的)
提示:您可以像我們在 POST /event/:id/register 中那樣檢查事件是否存在。之後,您需要為註冊表編寫 SELECT 查詢來取得具有給定 event_id 的所有行。
類似地,您也可以嘗試建立一個端點來刪除特定事件,例如 DELETE /event/:id 。
恭喜!您已成功建立自己的 API,用於安排活動和管理使用者註冊。你已經走了很長的路。
您可以新增更多功能,例如新增 cron 作業,以便自動刪除 end_time 已過的事件。
如果您喜歡這篇文章,請點贊,如果您有任何疑問或只是想與此相關的聊天,請發表評論。也可以在 LinkedIn 追蹤我:https://www.linkedin.com/in/amartya-chowdhury/
以上是使用 Express 和 Supabase 建立您自己的事件排程 API的詳細內容。更多資訊請關注PHP中文網其他相關文章!