尝试用 ChatGPT 完整的实现一个 Serverless 后端工程

?
本文转自 .Z 的博客,原文:,版权归原作者所有 。欢迎投稿,投稿请添加微信好友:cloud--yang
写在前面
因为从过年开始,断断续续的开始写一个自己用的记账工具,当时自己的想法是尽量小巧,尽量用自己不熟悉的技术栈来玩 。那时候还没有横空出世的 ,我老老实实的在哄睡张小望的时候看 B 站的视频把 Vue3 撸了一遍,然后花了两三天搭了一个前端出来 。
后来发现,除了已经有了 KV 存储外,去年发布了 Alpha 测试阶段的D1[1] —— 基于的边缘数据库,于是考虑用和 D1 来做一个完整的的后端 。
可我没写过,也没用过 ,也不会。
?
万事不决问 AI,于是有了如下对话:
You:
我打算使用+D1 的数据库创建一个后端服务 。数据库中会有几张数据库表,提供对这些表的增删改查 。请帮忙设计一个基本的代码框架结构,方便后续扩展新的表和新的服务 。
:
在这个项目中,我们将使用和(D1) 的数据库来创建一个后端服务 。为了保持可扩展性,我们将创建一个基本的代码框架结构,以便后续添加新表和新服务 。
以下是一个基本的代码框架结构:
文件结构:
- src/- database/- index.js- migration.js- handlers/- index.js- table1.js- table2.js- utils/- index.js- worker.js
代码实现:
/src//index.js
import { open } from 'sqlite';import { Database } from 'sqlite3';export async function getDb() {return open({filename: ':memory:',driver: Database,});}
/src//.js
export async function runMigrations(db) {await db.migrate({ force: 'last' });}
/src//index.js
import { handleTable1 } from './table1';import { handleTable2 } from './table2';export function getHandler(path) {switch (path) {case '/table1':return handleTable1;case '/table2':return handleTable2;default:return null;}}
/src//.js
export async function handleTable1(request, db) {// 根据request.method实现对应的增删改查功能// 例如: GET, POST, PUT, DELETE}
/src//.js
export async function handleTable2(request, db) {// 根据request.method实现对应的增删改查功能// 例如: GET, POST, PUT, DELETE}
/src/utils/index.js
export function parsePath(request) {const url = new URL(request.url);return url.pathname;}
/src/.js
import { getDb } from './database';import { runMigrations } from './database/migration';import { getHandler } from './handlers';import { parsePath } from './utils';addEventListener('fetch', (event) => {event.respondWith(handleRequest(event.request));});async function handleRequest(request) {const db = await getDb();await runMigrations(db);const path = parsePath(request);const handler = getHandler(path);if (!handler) {return new Response('Not found', { status: 404 });}return handler(request, db);}
这个框架为你提供了一个基本的结构,可以根据需要扩展 。你可以在文件夹下为新表创建新的处理器,并在 /index.js 中将它们添加到路由中 。同时,你可以在 /.js 中为新表添加迁移脚本 。
You:
假设第一张表名为 ,字段如下:
?
这个地方手误了,直接敲了回车……
:
假设表有以下字段:
id (整型,主键,自增)
(文本,唯一,不可为空)