Node.js出现SyntaxError: Invalid left-hand side in assignment错误求助
错误分析与解决方案
错误原因
你遇到的SyntaxError: Invalid left-hand side in assignment是运算符优先级冲突导致的:
JavaScript中&&的优先级高于=,所以你写的startDate == "''" && startDate= new Date().toISOString().slice(0, 10);会被引擎解析为:
(startDate == "''" && startDate) = new Date().toISOString().slice(0, 10);
括号里的表达式是一个布尔值或变量引用,不能作为赋值操作的左侧目标,因此触发语法错误。
修复方案
方案1:给赋值语句添加括号
强制改变运算符优先级,让赋值操作在&&的右侧整体执行:
viewInvoiceByDate: (params, callBack) => { let startDate = params.date; let endsDate = params.endDate; startDate == "''" && (startDate = new Date().toISOString().slice(0, 10)); endsDate == "''" && (endsDate = new Date().toISOString().slice(0, 10)); pool.query( `SELECT * FROM cash_management WHERE date BETWEEN ${startDate} AND ${endsDate} `, (error, results, fields) => { if (error) { return callBack(error); } return callBack(null, results); } ); },
方案2:改用if语句(推荐)
短路与的赋值写法可读性差,改用if语句可以彻底避免优先级问题,代码更清晰:
viewInvoiceByDate: (params, callBack) => { let startDate = params.date; let endsDate = params.endDate; if (startDate === "''") { startDate = new Date().toISOString().slice(0, 10); } if (endsDate === "''") { endsDate = new Date().toISOString().slice(0, 10); } pool.query( `SELECT * FROM cash_management WHERE date BETWEEN ${startDate} AND ${endsDate} `, (error, results, fields) => { if (error) { return callBack(error); } return callBack(null, results); } ); },
额外提醒:SQL注入风险
当前代码使用模板字符串拼接SQL参数,存在严重的SQL注入漏洞。建议改用参数化查询:
pool.query( 'SELECT * FROM cash_management WHERE date BETWEEN ? AND ?', [startDate, endsDate], (error, results, fields) => { if (error) { return callBack(error); } return callBack(null, results); } );
参数化查询会自动处理参数转义,彻底避免SQL注入问题。
内容的提问来源于stack exchange,提问作者Chamidu Purage
相关产品推荐
相关产品推荐

