Rumah > Artikel > hujung hadapan web > Cipta API Penjadualan Acara anda sendiri menggunakan Express dan Supabase
Pernah memerlukan platform untuk menguruskan acara kelab anda? Atau mungkin menjadualkan mesyuarat di pejabat anda? Tetapi dalam mencari platform mampu milik, anda tersesat dalam pelbagai pilihan yang diberikan kepada anda? Atau mungkin anda hanya mahu mengatur hidup anda dengan lebih baik dan menjadualkan apabila anda perlu menghadiri acara yang mana?
Ikuti siaran ini hingga akhir, dan anda akan mendapat API penjadualan acara asas di mana semua ciri asas seperti penciptaan acara dan pendaftaran akan tersedia.
Repositori GitHub untuk projek ini ada di https://github.com/xerctia/gatherly
Express ialah rangka kerja Javascript untuk menyediakan dan membina pelayan untuk mengendalikan pelbagai jenis permintaan seperti GET, POST dan lain-lain. Express ialah salah satu rangka kerja bahagian belakang yang paling popular digunakan, dan juga merupakan salah satu rangka kerja yang paling mudah untuk dimulakan oleh pemula. . Dalam blog ini, kami akan menggunakan Express untuk membuat pelayan kami dan menyediakan titik akhir yang diperlukan.
PostgreSQL ialah sistem pengurusan pangkalan data hubungan sumber terbuka (RDBMS), yang terkenal dengan kebolehpercayaan, skalabiliti dan sokongan untuk pertanyaan kompleks. Ia menawarkan ciri lanjutan seperti sokongan untuk data JSON, carian teks penuh dan kebolehlanjutan, menjadikannya serba boleh untuk kedua-dua projek kecil dan aplikasi berskala besar. PostgreSQL popular di kalangan pembangun dan dihargai kerana prestasinya yang mantap.
Terdapat banyak penyedia PostgreSQL tersedia di web yang membenarkan penggunaan pangkalan data PostgreSQL, ada yang percuma dan ada yang dengan pelan berbayar. Dalam projek ini, kami akan menggunakan Supabase dan pangkalan datanya sebagai PostgreSQL kami.
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}`); })
Tahniah! Anda telah berjaya menyediakan pelayan asas dalam 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;
Tahniah, anda telah berjaya menyambungkan pangkalan data Supabase anda ke fail index.js anda. Kami kini bersedia untuk mula membina titik akhir API sebenar.
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 } })
Ini juga boleh dilakukan di luar tangkapan cuba, sama seperti nilai input dalam titik akhir sebelumnya.
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"
Untuk melaksanakan ciri ini, anda perlu mencipta jadual baharu dalam Supabase terlebih dahulu.
Pergi ke SQL Editor dan jalankan pertanyaan berikut:
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");
Ini adalah kerja rumah untuk kamu semua. (Jangan marah, jika anda tidak dapat melakukannya walaupun selepas mencuba, kod GitHub sentiasa tersedia)
Petunjuk: Anda boleh menyemak sama ada acara itu wujud dengan cara yang sama seperti yang kami lakukan dalam POST /event/:id/register. Selepas itu, anda perlu menulis pertanyaan PILIH untuk jadual pendaftaran untuk mengambil semua baris dengan event_id yang diberikan.
Begitu juga, anda juga boleh mencuba dan membina titik akhir untuk memadamkan acara tertentu, seperti DELETE /event/:id .
Tahniah! Anda telah berjaya mencipta API anda sendiri untuk menjadualkan acara dan mengurus pendaftaran pengguna. Anda telah pergi jauh.
Anda boleh menambah lebih banyak ciri, seperti menambahkan tugas cron supaya acara yang telah berlalu masa tamatnya dipadamkan secara automatik.
Jika anda menyukai siaran ini, letakkan suka, dan komen jika anda mempunyai sebarang keraguan atau hanya mahu bersembang berkaitan dengan ini. Ikuti juga saya di LinkedIn: https://www.linkedin.com/in/amartya-chowdhury/
Atas ialah kandungan terperinci Cipta API Penjadualan Acara anda sendiri menggunakan Express dan Supabase. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!