零基础后端学习
​​以下是为零后端基础学习者量身定制的后端实现详细指南。我将用最直白的语言、分步骤拆解每个操作包含完整可运行的代码示例和关键原理图解确保你跟着做就能跑通项目。一、从零开始后端环境搭建5分钟搞定步骤1安装基础工具Node.js后端运行环境下载地址https://nodejs.org/ 选LTS版本带Recommended for Most Users标识安装后打开命令行Windows用cmdMac用Terminal输入node -v # 应显示 v20.x.x npm -v # 应显示 10.x.xPostgreSQL数据库下载地址PostgreSQL: Downloads安装时记住设置的密码后面会用到安装后打开pgAdmin 4自动安装的图形化工具右键Servers→Create→Server填写连接名如mydb在Connection标签页填Host:localhostPort:5432Username:postgres默认Password: 你安装时设的密码步骤2创建第一个后端项目# 1. 创建项目文件夹 mkdir my-task-backend cd my-task-backend # 2. 初始化Node.js项目全部按回车用默认值 npm init -y # 3. 安装核心依赖 npm install express prisma prisma/client bcryptjs jsonwebtoken cors dotenv npm install -D prisma nodemon # 4. 初始化Prisma数据库工具 npx prisma init✅ 此时项目结构文本my-task-backend/ ├── node_modules/ # 依赖包自动生成 ├── .env # 环境变量文件 ├── prisma/ # 数据库配置 │ └── schema.prisma ├── package.json # 项目配置 └── package-lock.json二、数据库设计用最简单的方式建表关键步骤1修改数据库连接配置打开.env文件替换你的密码DATABASE_URLpostgresql://postgres:你的密码localhost:5432/mydb?schemapublic步骤2定义用户表只做最简版打开prisma/schema.prisma删除所有内容粘贴以下代码// 只保留用户注册登录必需的字段 model User { id Int id default(autoincrement()) email String unique // 唯一标识 password String // 加密后的密码 }步骤3创建数据库表npx prisma migrate dev --name init✅ 执行后会自动在PostgreSQL创建mydb数据库生成User表包含 id/email/password 字段打开 pgAdmin → 刷新数据库 → 展开Schemas→Tables就能看到User表三、实现用户注册功能核心代码详解步骤1创建基础服务器文件新建index.js项目根目录// 1. 引入依赖 const express require(express); const cors require(cors); const { PrismaClient } require(prisma/client); const bcrypt require(bcryptjs); // 2. 初始化工具 const app express(); const prisma new PrismaClient(); const saltRounds 10; // 密码加密强度 // 3. 允许前端访问解决跨域问题 app.use(cors()); app.use(express.json()); // 解析JSON请求体 // 4. 注册接口 app.post(/api/register, async (req, res) { try { // 从请求中获取邮箱和密码 const { email, password } req.body; // 检查邮箱是否已存在 const existingUser await prisma.user.findUnique({ where: { email } }); if (existingUser) { return res.status(400).json({ error: 邮箱已注册 }); } // 用bcrypt加密密码安全关键 const hashedPassword await bcrypt.hash(password, saltRounds); // 保存到数据库 const newUser await prisma.user.create({ data: { email, password: hashedPassword } }); // 返回成功响应不返回密码 res.status(201).json({ id: newUser.id, email: newUser.email }); } catch (error) { res.status(500).json({ error: 服务器错误 }); } }); // 5. 启动服务器 const PORT 3000; app.listen(PORT, () { console.log(后端运行中: http://localhost:${PORT}); });步骤2测试注册功能启动后端命令行执行node index.js✅ 看到后端运行中: http://localhost:3000表示成功用Postman测试下载地址Download Postman | Get Started for Free方法POSTURLhttp://localhost:3000/api/registerBody → raw → JSONjson{ email: testexample.com, password: 123456 }点击Send→ 返回成功数据即表示注册成功验证数据是否存入数据库打开 pgAdmin → 右键User表 →View/Edit Data→All Rows你会看到password字段是一串加密字符串不是明文四、实现用户登录功能含JWT认证步骤1生成JWT密钥在.env文件末尾添加不要用示例密钥JWT_SECRETyour_strong_secret_here_123 # 换成你自己的随机字符串步骤2在index.js中添加登录接口// 在 const saltRounds 10; 下方添加 const jwt require(jsonwebtoken); require(dotenv).config(); // 读取 .env 文件 // 新增登录接口 app.post(/api/login, async (req, res) { try { const { email, password } req.body; // 1. 检查用户是否存在 const user await prisma.user.findUnique({ where: { email } }); if (!user) { return res.status(401).json({ error: 邮箱或密码错误 }); } // 2. 验证密码用bcrypt.compare const isPasswordValid await bcrypt.compare(password, user.password); if (!isPasswordValid) { return res.status(401).json({ error: 邮箱或密码错误 }); } // 3. 生成JWT令牌有效期2小时 const token jwt.sign( { userId: user.id, email: user.email }, // 携带用户信息 process.env.JWT_SECRET, { expiresIn: 2h } ); // 4. 返回令牌前端会保存到localStorage res.json({ token }); } catch (error) { res.status(500).json({ error: 服务器错误 }); } });步骤3测试登录用Postman发送请求URLhttp://localhost:3000/api/loginBody{ email: testexample.com, password: 123456 }成功响应示例{ token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsImVtYWlsIjoidGVzdEBleGFtcGxlLmNvbSIsImlhdCI6MTcxOTY3MjAwMCwiZXhwIjoxNzE5Njc5MjAwfQ.xxxxx } 这个token就是后续请求的通行证复制它备用五、保护需要登录的接口权限控制步骤1创建认证中间件在index.js顶部添加// 验证JWT的中间件 function authenticateToken(req, res, next) { // 1. 从请求头获取token const authHeader req.headers[authorization]; const token authHeader authHeader.split( )[1]; // 格式: Bearer xyz if (!token) return res.status(401).json({ error: 未提供令牌 }); // 2. 验证token jwt.verify(token, process.env.JWT_SECRET, (err, user) { if (err) return res.status(403).json({ error: 令牌无效 }); // 3. 将用户信息存入req对象后续接口可用 req.user user; next(); // 继续执行后续逻辑 }); }步骤2创建需要登录的接口在index.js末尾添加// 受保护的接口示例 app.get(/api/profile, authenticateToken, async (req, res) { // req.user 包含JWT中的信息userId/email const user await prisma.user.findUnique({ where: { id: req.user.userId }, select: { id: true, email: true } // 只返回必要字段 }); res.json(user); });步骤3测试受保护接口在Postman中URLhttp://localhost:3000/api/profileHeaders 添加KeyValueAuthorizationBearer 你之前复制的token成功响应{ id: 1, email: testexample.com }如果删除token或改错会返回401 Unauthorized

相关新闻