乌克兰服装网站建设管理咨询是做什么的
乌克兰服装网站建设,管理咨询是做什么的,python做网站的案例,百度电话号码查询平台基于 Express 的毕业设计实战#xff1a;从零构建高可用 RESTful API 服务 1. 学生常见痛点#xff1a;为什么 Demo 永远跑不到线上
做毕业设计时#xff0c;很多同学把“能跑起来”当成终点#xff0c;结果代码越写越像“意大利面条”#xff1a;
路由全部堆在 app.js const router express.Router(); const userCtrl require(../controller/user); router.post(/register, userCtrl.register); router.post(/login, userCtrl.login); module.exports router;在routes/index.js统一挂载module.exports (app) { app.use(/api/users, require(./user)); app.use(/api/papers, require(./paper)); };好处路由文件只负责“指路”逻辑下沉到 controller单一职责。新增模块只需加文件不碰旧代码符合开闭原则。3.2 自定义错误中间件统一格式、统一日志没有错误规范的 API前端收到500就抓瞎。定义一套“业务级别”错误码class BusinessError extends Error { constructor(code, msg, status 400) { super(msg); this.code code; this.status status; } }错误中间件middleware/error_handler.jsmodule.exports (err, req, res, next) { // 已知业务错误 if (err instanceof BusinessError) { return res.status(err.status).json({ code: err.code, msg: err.message }); } // 未知错误 console.error(err); res.status(500).json({ code: INTERNAL_ERROR, msg: 服务器走神了 }); };在app.js最后挂载const errorHandler require(./middleware/error_handler); app.use(errorHandler);效果前端拿到{code: 10001, msg: 手机号已存在}直接弹窗无需解析 HTML。未知错误落盘日志方便定位。3.3 JWT 令牌验证无状态登录毕业项目常见“把用户信息塞 session”——结果服务器一重启全掉线。用 JWT 实现真·无状态安装依赖npm i jsonwebtoken bcryptjs登录接口controller/user.js片段const jwt require(jsonwebtoken); const bcrypt require(bcryptjs); const { BusinessError } require(../utils/error); exports.login async (req, res, next) { const { email, password } req.body; const user await User.findOne({ email }); if (!user) return next(new BusinessError(USER_NOT_FOUND, 用户不存在)); const ok await bcrypt.compare(password, user.passwordHash); if (!ok) return next(new BusinessError(PASSWORD_ERROR, 密码错误)); const token jwt.sign({ uid: user.id }, process.env.JWT_SECRET, { expiresIn: 7d }); res.json({ token }); };验证中间件middleware/auth.jsconst jwt require(jsonwebtoken); module.exports (req, res, next)用最严格格式输出纯 Markdown 正文不要任何额外说明 [](https://t.csdnimg.cn/iKHO) ---