建设银行网网站南宁工程造价建设信息网站

张小明 2026/1/11 17:49:23
建设银行网网站,南宁工程造价建设信息网站,网站开发模式名词,seo推广是做什么的核心目标正确建立通信#xff0c;实现跨域支持、请求解析、统一响应、环境适配核心配置项1. 跨域配置#xff08;最关键#xff01;前端跨域请求必配#xff09;前端运行在 http://localhost:8080/3000 等端口#xff0c;后端运行在 http://localhost:3001 等端口#xf…核心目标正确建立通信实现跨域支持、请求解析、统一响应、环境适配核心配置项1. 跨域配置最关键前端跨域请求必配前端运行在http://localhost:8080/3000等端口后端运行在http://localhost:3001等端口浏览器会触发「同源策略」拦截请求必须配置 CORS跨域资源共享。1.1 安装依赖npm install cors --save1.2 在app.js中配置const express require(express); const cors require(cors); const app express(); // 基础跨域配置允许所有前端域名访问开发环境可用 app.use(cors()); // ------------------------进阶--------------------------- // 生产环境精准配置仅允许指定前端域名 // app.use(cors({ // origin: [ // https://your-frontend-domain.com, // 生产环境前端域名 // http://localhost:8080 // 开发环境前端本地地址 // ], // credentials: true, // 允许前端携带Cookie如登录态 // methods: [GET, POST, PUT, DELETE, OPTIONS], // 允许的请求方法 // allowedHeaders: [Content-Type, Authorization] // 允许的请求头 // }));2. 请求体解析前端传参必配确保后端能正确解析前端传递的JSON/表单/文件等参数需配置 Express 内置中间件// 解析 JSON 格式请求体前端 axios.post 传 JSON 必配 app.use(express.json()); // 解析表单格式请求体如前端 form 提交、axios 传 application/x-www-form-urlencoded app.use(express.urlencoded());3.端口与地址配置前端能访问到后端确保后端监听的地址和端口对前端可见进阶配置生产环境必做1. 接口前缀统一简化前端请求路径所有接口统一前缀如/api前端无需拼接零散路径// 手动挂载适合少量路由 app.use(/api, userRouter); app.use(/api, goodsRouter); // 自动挂载使用之前封装的自动挂载方法2. 错误处理避免前端收到无意义的报错配置全局错误中间件捕获所有未处理的异常返回统一格式全局错误处理中间件必须放在所有路由之后 app.use((err, req, res, next) { console.error(全局异常, err.stack); // 后端记录错误日志 // 给前端返回统一错误格式 error(res, 服务器内部错误, 500, err); }); // 404 处理前端访问不存在的接口 app.use((req, res) { error(res, 接口不存在, 404); });3. 请求头与认证如 Token 验证若前端需要携带登录态如 JWT Token配置允许认证头并封装认证中间件依赖名称安装命令核心作用jsonwebtokennpm install jsonwebtoken --save生成 JWT Token 验证 Token 合法性核心express-jwt可选npm install express-jwt --save简化 Express 中 JWT 认证中间件的编写替代手动验证crypto-jsnpm install crypto-js --save对敏感信息如用户密码进行加密如 MD5/SHA256避免明文存储// 跨域配置中允许 Authorization 头已在上面配置 // 认证中间件middleware/auth.js const jwt require(jsonwebtoken); const { error } require(../utils/response); const authMiddleware (req, res, next) { // 从请求头获取 Token const token req.headers.authorization?.replace(Bearer , ); if (!token) { return error(res, 未登录请先登录, 401); } try { // 验证 Token const user jwt.verify(token, process.env.JWT_SECRET); req.user user; // 挂载用户信息到 req后续接口可直接使用 next(); } catch (err) { error(res, Token 过期或无效, 401); } }; // 在需要认证的路由中使用 const orderRouter express.Router(); orderRouter.use(authMiddleware); // 所有订单接口需要登录 orderRouter.post(/, async (req, res) { console.log(当前登录用户, req.user.id); // 直接使用认证后的用户信息 });express-jwt简化中间件替代手动编写 Token 验证逻辑直接通过中间件拦截未认证请求const expressJwt require(express-jwt); const dotenv require(dotenv); dotenv.config(); // 全局认证中间件排除登录/注册接口 app.use( expressJwt({ secret: process.env.JWT_SECRET, algorithms: [HS256] // 指定加密算法必须和生成 Token 时一致 }).unless({ path: [/api/user/login, /api/user/register] // 无需认证的接口 }) ); // Token 验证失败的全局处理 app.use((err, req, res, next) { if (err.name UnauthorizedError) { return error(res, Token 过期或无效, 401); } next(err); });crypto-js密码加密用户注册 / 登录时加密密码后存储到数据库避免明文const CryptoJS require(crypto-js); // 加密密码如 MD5 const encryptPassword (password) { // 加盐salt提升安全性salt 需配置在环境变量中 return CryptoJS.MD5(password process.env.PWD_SALT).toString(); }; // 验证密码登录时对比加密后的密码 const checkPassword (inputPwd, dbPwd) { return encryptPassword(inputPwd) dbPwd; };在.env文件中配置敏感信息避免硬编码# .env 文件 JWT_SECRETyour_jwt_secret_key_123456 # JWT 密钥随机字符串越长越安全 JWT_EXPIRES_IN2h # Token 过期时间 PWD_SALTyour_password_salt_789 # 密码加盐字符串前端对接示例以 Axios 为例前端需配置请求基地址、请求头、响应拦截器和后端统一格式适配// src/utils/request.js前端 Axios 封装 import axios from axios; // 配置后端基地址和后端端口/前缀一致 const request axios.create({ baseURL: http://localhost:3001/api, // 后端接口前缀 timeout: 10000, // 请求超时 withCredentials: true // 允许携带Cookie若后端配置了 credentials: true }); // 请求拦截器添加 Token 等请求头 request.interceptors.request.use( (config) { const token localStorage.getItem(token); if (token) { config.headers.Authorization Bearer ${token}; } return config; }, (error) Promise.reject(error) ); // 响应拦截器统一处理后端返回格式 request.interceptors.response.use( (response) { const res response.data; // 后端 success: true 直接返回数据 if (res.success) { return res.data; } // 业务错误如参数错、未登录 ElMessage.error(res.msg); // 前端提示错误信息 return Promise.reject(res); }, (error) { // 网络错误/500错误 ElMessage.error(error.response?.data?.msg || 请求失败); return Promise.reject(error); } ); export default request;
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

重庆綦江网站制作公司电话网页设计图片与文字的研究

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2026/1/11 16:27:21 网站建设

广州网站建设制作价格canva ppt模板

大数据预测分析:从数据洪流中淘出商业黄金——解码数据背后的赚钱逻辑 关键词 大数据预测分析 | 商业逻辑 | 数据挖掘 | 机器学习模型 | 精准决策 | 数据价值转化 | 全链路优化 摘要 当企业淹没在“数据洪流”中时,大数据预测分析不是“技术炫技”&#…

张小明 2026/1/11 19:34:53 网站建设

产品介绍网站模板龙华区属于深圳哪个区

Axure原型设计实战宝典:20个经典交互案例深度解析 【免费下载链接】Axure经典案例集锦 本仓库提供了一个名为“axure20个经典案例.zip”的资源文件下载。该文件包含了20个经典的Axure案例,适用于人机交互课程的作业参考和学习。 项目地址: https://git…

张小明 2026/1/11 10:36:10 网站建设

东莞网站设计的公司wordpress 艺术家

Linux 中 IPX 与 NCP 文件系统的使用与配置 在早期,企业环境就开始使用基于 Novell NetWare 操作系统及相关协议的文件和打印服务器来共享文件和打印机。如今,很多企业仍有使用这些协议的遗留网络,并希望将其与新的 TCP/IP 支持集成。Linux 不仅支持 TCP/IP 协议,还支持 N…

张小明 2026/1/10 7:08:16 网站建设

深圳门户网站开发网页设计与网站建设基础心得体会

YOLOFuse镜像版本管理:如何获取最新版与历史版本? 在多模态感知系统日益普及的今天,一个现实问题摆在开发者面前:如何在不断迭代的算法版本中,既享受新功能带来的性能提升,又能确保已有系统的稳定运行&…

张小明 2026/1/10 14:24:37 网站建设

产品设计排版网站知名品牌

摘要 随着信息技术的快速发展,企业对于销售流程的高效管理需求日益增长。传统的销售管理系统往往采用前后端耦合的开发模式,导致系统维护成本高、扩展性差,难以适应现代企业灵活多变的业务需求。前后端分离架构通过将前端展示与后端逻辑解耦&…

张小明 2026/1/9 21:08:20 网站建设