当前位置: 首页 > wzjs >正文

qq群推广用什么网站好为什么要创建网站

qq群推广用什么网站好,为什么要创建网站,队标logo设计简单,电商建站系统数据库: PostgreSQL用户名: postgres密码: 123 第一步:环境准备 在开始之前,请确保你的电脑上已经安装了以下软件: Node.js: 版本 18 或更高。PostgreSQL: 确保 PostgreSQL 服务已经安装并正在运行。 你可以使用 node -v 和 psql --versi…
  • 数据库: PostgreSQL
  • 用户名: postgres
  • 密码: 123

第一步:环境准备

在开始之前,请确保你的电脑上已经安装了以下软件:

  • Node.js: 版本 18 或更高。
  • PostgreSQL: 确保 PostgreSQL 服务已经安装并正在运行。

你可以使用 node -v 和 psql --version 来检查它们是否已正确安装。


第二步:数据库和数据表设置

我们需要先创建一个数据库和一个用于存放用户数据的表。

登录 PostgreSQL:
打开你的终端或命令行工具,使用 psql 命令登录到 PostgreSQL。你可能需要根据你的安装方式指定用户。

  • Generated bash
psql -U postgres

Use code with caution.Bash

创建数据库:
我们将创建一个名为 hono_db 的数据库。

  • Generated sql
CREATE DATABASE hono_db;

Use code with caution.SQL

连接到新数据库:
使用 \c 命令连接到刚刚创建的数据库。

  • Generated sql
\c hono_db

Use code with caution.SQL

创建用户表 (users):
我们将创建一个 users 表,包含 id, name, 和 email 字段。

  • Generated sql
CREATE TABLE users (id SERIAL PRIMARY KEY,name VARCHAR(100) NOT NULL,email VARCHAR(100) UNIQUE NOT NULL,created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

Use code with caution.SQL

    • SERIAL PRIMARY KEY: 自动递增的整数作为主键。
    • VARCHAR(100): 存储姓名和邮箱。
    • NOT NULL 和 UNIQUE: 确保数据的完整性。
    • created_at: 记录创建时间。

现在数据库已经准备好了。


第三步:项目初始化与依赖安装

创建项目文件夹:

  • Generated bash
mkdir hono-postgres-crud
cd hono-postgres-crud

Use code with caution.Bash

初始化 Node.js 项目:

  • Generated bash
npm init -y

Use code with caution.Bash

安装 Hono 和相关依赖:

    • hono: Hono 核心库。
    • @hono/node-server: 在 Node.js 环境中运行 Hono 的适配器。
    • pg: Node.js 的 PostgreSQL 客户端库,用于连接和查询数据库。
    • dotenv: 用于管理环境变量(如数据库密码),这是最佳实践。
  • Generated bash
npm install hono @hono/node-server pg dotenv

Use code with caution.Bash

安装开发依赖 (TypeScript):
我们将使用 TypeScript 来编写代码,这能提供更好的类型安全和开发体验。

    • typescript: TypeScript 编译器。
    • tsx: 一个非常快速的 TypeScript 执行器,用于开发。
    • @types/...: 对应库的类型定义文件。
  • Generated bash
npm install -D typescript @types/node @types/pg tsx

Use code with caution.Bash


第四步:项目配置

配置 TypeScript (tsconfig.json):
在项目根目录创建 tsconfig.json 文件,并添加以下内容:

  • Generated json
{"compilerOptions": {"target": "ESNext","module": "ESNext","moduleResolution": "node","strict": true,"esModuleInterop": true,"skipLibCheck": true,"forceConsistentCasingInFileNames": true,"outDir": "./dist"}
}

Use code with caution.Json

配置环境变量 (.env 文件):
在项目根目录创建 .env 文件。不要将此文件提交到 Git 仓库。我们在这里存放数据库连接信息。

  • Generated code
# PostgreSQL Connection String
# 格式: postgresql://[user]:[password]@[host]:[port]/[database]
DATABASE_URL="postgresql://postgres:123@localhost:5432/hono_db"

Use code with caution.

注意:

    • 请将 postgresql:123 替换成你自己的用户名和密码。
    • localhost:5432 是 PostgreSQL 的默认主机和端口。
    • hono_db 是我们在第二步中创建的数据库名。

添加 package.json 脚本:
打开 package.json 文件,在 "scripts" 部分添加一个 dev 命令,以便用 tsx 启动开发服务器。

  • Generated json
"scripts": {"dev": "tsx --watch src/index.ts"
},

Use code with caution.Json


第五步:编写 Hono 应用代码

创建 src 目录和 index.ts 文件:

  • Generated bash
mkdir src
touch src/index.ts

Use code with caution.Bash

编写 src/index.ts 文件:
这是我们项目的核心文件。我们将在这里设置 Hono 应用、连接数据库并定义所有 CRUD 路由。

  • Generated typescript
import { Hono } from 'hono';
import { logger } from 'hono/logger';
import { serve } from '@hono/node-server';
import { Pool } from 'pg';
import 'dotenv/config'; // 自动加载 .env 文件// 1. 初始化 Hono 应用
const app = new Hono();// 2. 初始化 PostgreSQL 连接池
const pool = new Pool({connectionString: process.env.DATABASE_URL,
});// 检查数据库连接
pool.connect((err, client, release) => {if (err) {return console.error('Error acquiring client', err.stack);}console.log('Successfully connected to PostgreSQL!');client.release();
});// 3. 中间件
app.use('*', logger());// 定义 User 类型 (用于 TypeScript)
type User = {id: number;name: string;email: string;
};// 4. 定义 CRUD 路由// CREATE: 创建一个新用户
app.post('/users', async (c) => {try {const { name, email } = await c.req.json<{ name: string; email: string }>();if (!name || !email) {return c.json({ error: 'Name and email are required' }, 400);}const result = await pool.query('INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *',[name, email]);const newUser: User = result.rows[0];return c.json(newUser, 201); // 201 Created} catch (error) {console.error('Create user error:', error);return c.json({ error: 'Failed to create user' }, 500);}
});// READ: 获取所有用户
app.get('/users', async (c) => {try {const result = await pool.query('SELECT * FROM users ORDER BY id ASC');const users: User[] = result.rows;return c.json(users);} catch (error) {console.error('Get all users error:', error);return c.json({ error: 'Failed to fetch users' }, 500);}
});// READ: 获取单个用户
app.get('/users/:id', async (c) => {try {const id = parseInt(c.req.param('id'));const result = await pool.query('SELECT * FROM users WHERE id = $1', [id]);if (result.rows.length === 0) {return c.json({ error: 'User not found' }, 404);}const user: User = result.rows[0];return c.json(user);} catch (error) {console.error('Get single user error:', error);return c.json({ error: 'Failed to fetch user' }, 500);}
});// UPDATE: 更新一个用户
app.put('/users/:id', async (c) => {try {const id = parseInt(c.req.param('id'));const { name, email } = await c.req.json<{ name: string; email: string }>();if (!name || !email) {return c.json({ error: 'Name and email are required' }, 400);}const result = await pool.query('UPDATE users SET name = $1, email = $2 WHERE id = $3 RETURNING *',[name, email, id]);if (result.rows.length === 0) {return c.json({ error: 'User not found' }, 404);}const updatedUser: User = result.rows[0];return c.json(updatedUser);} catch (error) {console.error('Update user error:', error);return c.json({ error: 'Failed to update user' }, 500);}
});// DELETE: 删除一个用户
app.delete('/users/:id', async (c) => {try {const id = parseInt(c.req.param('id'));const result = await pool.query('DELETE FROM users WHERE id = $1 RETURNING *', [id]);if (result.rowCount === 0) {return c.json({ error: 'User not found' }, 404);}return c.json({ message: `User with id ${id} deleted successfully` });} catch (error) {console.error('Delete user error:', error);return c.json({ error: 'Failed to delete user' }, 500);}
});// 5. 启动服务器
const port = 3000;
console.log(`Server is running on port ${port}`);serve({fetch: app.fetch,port,
});

Use code with caution.TypeScript


第六步:运行和测试应用

启动开发服务器:
在你的终端中,运行以下命令:

  • Generated bash
npm run dev

Use code with caution.Bash

如果一切顺利,你会看到如下输出:

Generated code

Successfully connected to PostgreSQL!
Server is running on port 3000

Use code with caution.

  • 使用 curl 或 Postman 测试 API:
    打开另一个终端,使用 curl 命令来测试你的 CRUD 端点。

CREATE (创建用户)

    • Generated bash
curl -X POST http://localhost:3000/users \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "email": "alice@example.com"}'

Use code with caution.Bash

你应该会收到类似 {"id":1,"name":"Alice","email":"alice@example.com"} 的响应。

再创建一个用户:

Generated bash

curl -X POST http://localhost:3000/users \
-H "Content-Type: application/json" \
-d '{"name": "Bob", "email": "bob@example.com"}'

Use code with caution.Bash

READ (获取所有用户)

    • Generated bash
curl http://localhost:3000/users

Use code with caution.Bash

你应该会看到一个包含 Alice 和 Bob 的 JSON 数组。

READ (获取单个用户)
假设 Alice 的 ID 是 1。

    • Generated bash
curl http://localhost:3000/users/1

Use code with caution.Bash

你应该会只看到 Alice 的信息。

UPDATE (更新用户)
更新 ID 为 1 的用户的信息。

    • Generated bash
curl -X PUT http://localhost:3000/users/1 \
-H "Content-Type: application/json" \
-d '{"name": "Alice Smith", "email": "alice.smith@example.com"}'

Use code with caution.Bash

你应该会收到更新后的用户信息。

DELETE (删除用户)
删除 ID 为 2 的用户 (Bob)。

    • Generated bash
curl -X DELETE http://localhost:3000/users/2

Use code with caution.Bash

你应该会收到 {"message":"User with id 2 deleted successfully"}。

再次检查
再次获取所有用户,确认 Bob 已经被删除。

    • Generated bash
curl http://localhost:3000/users

Use code with caution.Bash


第七步:总结与后续步骤

恭喜!你已经成功创建了一个使用 Hono.js 和 PostgreSQL 的全功能 CRUD API。

后续可以优化的方向:

  • 输入验证: 使用 @hono/zod-validator 和 Zod 库来验证请求体,确保传入的数据格式正确。
  • 错误处理: 创建一个全局的错误处理中间件来统一处理和格式化错误响应。
  • 代码结构: 当项目变大时,可以将路由、数据库逻辑(也称为 Repository 或 Service 层)分离到不同的文件中,使代码更易于维护。
  • 使用 ORM: 对于更复杂的项目,可以考虑使用像 Drizzle ORM 或 Prisma 这样的 ORM,它们可以简化数据库操作并提供更强的类型安全。

CRUD.http

// 创建用户
POST http://localhost:8080/users
Content-Type: application/json{"name": "Bob1","email": "bob1@example.com"
}###
// 获取所有用户
GET http://localhost:8080/users###
// 获取单个用户
GET http://localhost:8080/users/5###
// 更新用户
PUT http://localhost:8080/users/5
Content-Type: application/json{"name": "Bob2","email": "bob2@example.com"
}###
// 删除用户
DELETE http://localhost:8080/users/1


文章转载自:

http://mAZ6ow4i.ymfzd.cn
http://fbzB1vwq.ymfzd.cn
http://8gAxlPYT.ymfzd.cn
http://Dub86ty0.ymfzd.cn
http://5sY0ZkfP.ymfzd.cn
http://wdSe1zUO.ymfzd.cn
http://GKqMKKwc.ymfzd.cn
http://83EnQzTG.ymfzd.cn
http://TKVQdiEm.ymfzd.cn
http://tg4Nbj2Q.ymfzd.cn
http://DZHQBJja.ymfzd.cn
http://Wxfes4Et.ymfzd.cn
http://XlmdvhTj.ymfzd.cn
http://XToNB84I.ymfzd.cn
http://1wDAAtty.ymfzd.cn
http://ZNgaZXIZ.ymfzd.cn
http://xlI1ZoMn.ymfzd.cn
http://SJggIPWd.ymfzd.cn
http://GOb55Oau.ymfzd.cn
http://20FZzSJi.ymfzd.cn
http://kl9MOqVD.ymfzd.cn
http://pSnwQ0Sx.ymfzd.cn
http://3m9CDvwL.ymfzd.cn
http://ylFCBN7u.ymfzd.cn
http://WKVwxxi4.ymfzd.cn
http://tNcaiWTp.ymfzd.cn
http://9kqmiWoB.ymfzd.cn
http://M5lxlkg9.ymfzd.cn
http://Q2PkiXnX.ymfzd.cn
http://pposyXyZ.ymfzd.cn
http://www.dtcms.com/wzjs/611833.html

相关文章:

  • 网站建设的理念深圳做网站便宜
  • 网站建设与维护的试卷手机模板网站模板下载网站有哪些
  • 环保工程网站建设价格网络平台都有哪些
  • 泸友科技网站常见的电子商务网站推广方式
  • 网站建设制作宝塔面板做神马网站快速排
  • 网站开发前台怎么样设计一个电子商务网站建设方案
  • 网站字体颜色大小做网站接电话一般要会什么问题
  • 哪个大学的网站做的最好看网站开发之ios知识扩展
  • 提交谷歌网站广州冼村人很有钱吗
  • 地产网站开发宁波公司网站建设
  • 华东网站建设互联网网站开发创业计划书
  • 漳州正规网站建设哪家便宜网站内容布局
  • 盐城网站优化方案如何申请一个网站 新网
  • 跨越速运网站谁做的菠菜网站做首存
  • 大连做网站大公司企业员工培训课程有哪些
  • 长春专业企业网站建设价格贵阳网站建设优化
  • 杭州企业网站设计公司做钓鱼网站要具备什么
  • 淮安网站建设公司手机网站趋势
  • 做暧暧小视频网站简述营销型企业网站建设的内容
  • 网站建设整改情况汇报苏州能做网站
  • 国外有在线做设计方案的网站吗网上服务平台社保
  • 深圳免费网站优化网络推广wordpress多个标签
  • 旅游电子商务网站设计wordpress 好seo吗
  • 网站建设程序有哪些ico网站建设
  • 北京做手机网站的公司名称dnf盗号网站怎么做
  • 织梦dedecms多语言网站文章怎么打电话问网站建设推广
  • 肉山谷英雄传说新手任务登录英文网站怎么做网站建设宣传海报
  • 广州腾虎网络网站建设熊掌号app营销
  • 百度验证网站甘洛网站建设
  • 营销外贸网站建设阿里巴巴官网