Node.js路由中接收Score参数时,bet变量为何突然变为undefined?
问题原因
HTTP是无状态协议,你写的这个GET接口每次被调用时,都是独立的请求上下文——第一次带bet参数请求时创建的bet变量,只会在那次请求的处理过程中存在;当用户后续带Score参数发起新请求时,整个函数会重新执行,此时parameter里没有bet字段,bet变量自然就是undefined。
解决方案
要在跨请求之间保存用户的bet值,最常用的方式是用**会话(Session)**存储,以Express框架为例,可通过express-session实现:
1. 安装依赖
npm install express-session
2. 配置Session中间件
在项目入口文件(比如app.js)中添加Session配置:
const session = require('express-session'); app.use(session({ secret: 'your-custom-secret-key', // 替换为自己的加密密钥 resave: false, saveUninitialized: false, cookie: { secure: false } // 生产环境建议设为true(需配合HTTPS) }));
3. 修改接口代码
将bet存入Session,后续请求从Session中读取:
router.get('/:par',(req,res) =>{ const parameter = JSON.parse(req.params.par); if(parameter.bet != null){ // 执行余额检查逻辑... console.log(parameter.bet); // 把bet值存入Session req.session.userBet = parameter.bet; res.send("StartTheGame"); } else if(parameter.Score != null){ // 从Session中获取之前保存的bet值 const bet = req.session.userBet; console.log(bet); // 执行扣费逻辑... // 扣费完成后可清除Session中的bet,避免重复使用 delete req.session.userBet; res.send("ScoreProcessed"); } });
备选方案(不推荐)
如果不想用Session,也可以在传递Score参数时,把bet一起附带过来(比如请求参数改为{"Score": 100, "bet": 50}),但这种方式存在安全隐患——用户可随意篡改bet值,导致扣费金额错误,因此更建议使用Session方案。
内容的提问来源于stack exchange,提问作者vemmu
相关产品推荐
相关产品推荐

