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

如何在Node.js的Express中通过GET请求传递多个参数?

问题

需要将基于Express的POST接口修改为GET请求接口,接口通过URL参数传递email和amount,格式如下:
http://localhost:3000/api/bal/update-balance?email=aa@email.com&amount=4500

现有POST请求代码如上,需调整以适配GET请求的参数传递方式。

修改步骤

  • 切换请求方法:把router.post改成router.get,让接口处理GET请求
  • 调整参数获取:GET请求的参数存在req.query对象里,替换原有的req.body为req.query
  • 补充参数校验:确保email和amount参数存在且格式合法(比如amount要能转成有效数字)
  • 保留原有的Token验证、数据库更新及交易记录逻辑,仅修改参数来源

修改后的完整代码

const router = require("express").Router();
const User = require("../models/User");
const Trans = require("../models/Transactions");
const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");

router.get("/update-balance", async (req, res) => {
    try {
        // Token验证逻辑保持不变
        if (
          !req.headers.authorization ||
          !req.headers.authorization.startsWith("Bearer ") ||
          !req.headers.authorization.split(" ")[1]
        ) {
          return res.status(422).json({ message: "Please Provide Token!" });
        }

        // 从URL query中获取参数
        const { email, amount } = req.query;
        
        // 校验必填参数
        if (!email || !amount) {
            return res.status(400).json({ message: "Email and amount are required!" });
        }
        
        // 校验金额格式
        const parsedAmount = parseInt(amount);
        if (isNaN(parsedAmount) || parsedAmount <= 0) {
            return res.status(400).json({ message: "Invalid amount value!" });
        }

        // 查询用户信息
        const user = await User.find({ email });
        if (!user || user.length === 0) {
            return res.status(404).json({ message: "User not found!" });
        }
        
        const balance = parseInt(user[0].balance);
        const total_amt = parsedAmount + balance;

        // 更新余额并创建交易记录
        try {
          await User.findOneAndUpdate({ email }, { $set: { balance: total_amt } });
          const transactions = new Trans({
            email,
            narration: `NEW DEPOSIT - ${parsedAmount}`,
            credit: parsedAmount,
            debit: 0.00,
            amount: parsedAmount,
          });
          await transactions.save(); // 确保交易记录保存完成再返回响应
        } catch (err) {
          console.log(err);
          return res.status(500).json({ message: "Failed to update balance" });
        }

        return res.send({ error: false, message: "OK" });

      } catch (error) {
        res.status(404).json({ message: error.message });
      }
});

module.exports = router;

额外说明

  • GET请求参数会暴露在URL中,若涉及敏感操作,建议评估是否符合业务场景(REST规范中GET通常用于查询而非修改资源,但业务允许的话可使用)
  • 新增的参数校验能避免因参数缺失或格式错误导致的数据库异常
  • 给transactions.save()加上await,保证交易记录保存成功后再返回响应,避免异步操作导致的数据不一致

内容的提问来源于stack exchange,提问作者Pamela

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:56:21