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

编写Node.js登录API遭遇SyntaxError: Unexpected token '.'错误求助

问题排查:SyntaxError: Unexpected token '.' 解决方法

错误根源

你代码里的req.body?.UserName和req.body?.UserPassword使用了可选链操作符(?.),这个语法仅在Node.js 14.0.0及以上版本支持。如果你的Node.js版本低于14.x,V8引擎无法识别该语法,就会抛出SyntaxError: Unexpected token '.'错误。

解决办法

方案1:升级Node.js版本

直接将Node.js升级到14.x或更高的LTS版本(比如18.x),升级后可选链语法即可正常解析。

方案2:替换可选链为兼容写法

如果暂时无法升级Node.js,把可选链替换为传统的存在性判断逻辑:

let username = req.body && req.body.UserName;
let password = req.body && req.body.UserPassword;

额外提醒:修复SQL注入风险

你当前用字符串拼接构造SQL语句的写法存在严重的SQL注入漏洞,攻击者可通过输入特殊字符篡改查询逻辑。建议改用mssql的参数化查询,示例代码如下:

const router = require("express").Router();
const sql = require("mssql");

router.post("/login", async (req, res) => {
  // 替换可选链为兼容写法
  let username = req.body && req.body.UserName;
  let password = req.body && req.body.UserPassword;
  
  if (!username || !password) {
    res.status(400).json({ error: "Username or password is missing." });
    return;
  }
  try {
    await sql.connect("your connection string");
    
    // 使用参数化查询避免SQL注入
    const request = new sql.Request();
    request.input('username', sql.VarChar, username);
    request.input('password', sql.VarChar, password);
    
    const recordset = await request.query(`
      SELECT * 
      FROM dbo.Users 
      WHERE UserName = @username AND UserPassword = @password
    `);

    if (recordset.recordset.length > 0) {
      res.status(200).json({ message: "Login Successfully", data: recordset.recordset });
    } else {
      res.status(400).json({ error: "user not found" });
    }
  } catch (err) {
    res.status(500).json({ error: "something went wrong" });
    console.log(err);
    return;
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:55:20