You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:20:28