diff --git a/index.js b/index.js index de17151..60b508f 100644 --- a/index.js +++ b/index.js @@ -1,20 +1,25 @@ +// .env 中的配置写入 Node.js 的全局环境变量对象,下面的文件都可以直接使用 require('dotenv').config(); +// 搭建http服务器 const express = require("express"); const app = express(); -// 解析 JSON 请求体 +// 服务器解析 JSON 请求体 app.use(express.json()); -// 路由 +// 接入路由 const loginRouter = require("./routes/login"); const userRouter = require("./routes/user"); -// 注册路由 +// 所有接口,都统一加上 /api 前缀 app.use("/api", loginRouter); app.use("/api", userRouter); +// 启动服务器,监听端口 app.listen(3000, () => { console.log("服务器启动成功:http://localhost:3000"); -}); \ No newline at end of file +}); + +// index.js 就是 Node 后端的“总入口”:加载配置 → 创建 Express → 解析请求 → 加载路由 → 注册接口 → 启动 3000 端口服务器 \ No newline at end of file diff --git a/middleware/authMiddleware.js b/middleware/authMiddleware.js index f15e32d..1aa5e57 100644 --- a/middleware/authMiddleware.js +++ b/middleware/authMiddleware.js @@ -1,3 +1,4 @@ +// 校验token是否有效的中间件 const { verifyToken } = require("../utils/jwt"); @@ -13,9 +14,9 @@ function authMiddleware(req,res,next){ const token = header.split(" ")[1]; try{ const user = verifyToken(token); - // 保存用户信息 + // 把 JWT 验证出来的用户信息,挂到当前请求对象 req 上,以后的路由就可以req.user.userId来获取用户信息 req.user = user; - // 继续执行接口 + // 继续执行 next(); }catch(err){ res.status(401).json({ diff --git a/routes/login.js b/routes/login.js index fd1d091..59bf1d8 100644 --- a/routes/login.js +++ b/routes/login.js @@ -1,16 +1,27 @@ const express = require("express"); +// 创建路由对象,用于拆分接口 const router = express.Router(); +// 引入数据库连接对象 const db = require("../db/mysql"); - const jwt = require("../utils/jwt"); +// 注册登录接口 router.post("/login", (req, res) => { const { username, password } = req.body; - + const sql = ` - SELECT * FROM chat_mysql.users - WHERE username = ? AND password = ?; - `; + SELECT * FROM chat_mysql.users + WHERE username = ? AND password = ?; + `; + // 让 MySQL 执行一条 SQL 语句 + // db.query( + // sql, // ① 要执行的 SQL + // [username, password], // ② 给 SQL 中 ? 提供的参数 + // (error, results) => { // ③ 查询完成后的回调函数 + // ... + // } + // ); + // 执行 SQL 查询 db.query(sql, [username, password], (error, results) => { if (error) { console.error("数据库查询失败:", error); @@ -30,7 +41,7 @@ router.post("/login", (req, res) => { code: 200, message: "登录成功", data: { - token: token, + token: "Bearer " + token, username: results[0].username, }, }); @@ -44,6 +55,7 @@ router.post("/login", (req, res) => { }); }); +// 注册注册接口 router.post("/register", (req, res) => { const { username, password } = req.body; diff --git a/routes/user.js b/routes/user.js index 233986c..f41571a 100644 --- a/routes/user.js +++ b/routes/user.js @@ -1,7 +1,5 @@ const express = require("express"); - const router = express.Router(); - const authMiddleware = require("../middleware/authMiddleware"); diff --git a/utils/jwt.js b/utils/jwt.js index a8f2bae..5aac1e9 100644 --- a/utils/jwt.js +++ b/utils/jwt.js @@ -1,7 +1,7 @@ const jwt = require("jsonwebtoken"); const secret = process.env.JWT_SECRET; -// 创建token +// 创建token,把 payload + 签名密钥 secret + 过期时间,生成一个 JWT Token 字符串 function createToken(payload){ return jwt.sign( payload, @@ -12,7 +12,7 @@ function createToken(payload){ ); } -// 验证token +// 验证token,正确的token会返回payload,错误的token会抛出异常 function verifyToken(token){ return jwt.verify( token,