Node/Express中req.query.token截断与ER_PARSE_ERROR问题求助
问题分析与解决方案
一、SQL语法错误
你的SQL查询语句完全错误,SELECT语句不能搭配VALUES子句——VALUES是INSERT语句用来插入数据的语法。如果要查询resettoken表中匹配指定邮箱和token的记录,必须用WHERE条件做过滤。
错误代码:
connection.query('SELECT * FROM resettoken(email,token) VALUES (?, ?)', [email, token], function(err, result) {
修正后的代码:
connection.query('SELECT * FROM resettoken WHERE email = ? AND token = ?', [email, token], function(err, result) {
二、Token截断问题
URL中的+号会被默认解析为空格,再加上你的token包含/这类特殊字符,Express的req.query默认解析逻辑会把+转成空格,同时未编码的特殊字符也会导致解析截断。
解决方法:用decodeURIComponent对获取到的token做解码,还原原始内容:
const token = decodeURIComponent(req.query.token); const email = req.query.email;
另外需要注意,前端生成该URL时,必须用encodeURIComponent对token编码,确保特殊字符被正确转义,示例:
const encodedToken = encodeURIComponent('Wp+JCrZGAHEbDgyC4BExpWkX17Y0eurUZMu0zmu7J/5S3ChuRXoi3qdBFtdt6UlOJvMlsR4dOlMwlUS/u9UbWQ=='); const url = `http://localhost:5000/reset-password?token=${encodedToken}&email=test@test.com`;
内容的提问来源于stack exchange,提问作者Boom
相关产品推荐
相关产品推荐

