曾经需要一个平台来管理您俱乐部的活动吗?或者也许在您的办公室安排会议?但在寻找价格实惠的平台时,您是否在众多的选择中迷失了方向?或者也许您只是想更好地安排您的生活并安排何时必须参加哪些活动?
按照这篇文章进行到底,您最终将获得一个基本的事件调度 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中文网其他相关文章!