编写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
相关产品推荐
相关产品推荐

