Node.js中判断display_title是否包含JSON有效角色的语法问题
修正你的Node.js角色验证代码
咱先梳理下你代码里的几个关键问题,然后给你修正后的完整版本:
问题分析
角色配置引用错误
你导出的配置是module.exports={ roles: { valid:["Area Director","Managing Director","Default"]}},如果导入时用的是类似const rolesConfig = require('./你的配置文件.js'),那正确的角色数组引用应该是rolesConfig.roles.valid,而不是代码里的roles.roles.valid(除非你导入时变量名就叫roles,但代码里没体现这一点)。逻辑判断搞反了
String.includes()是检查字符串里是否包含某个单个子串,你直接传一个数组进去肯定不生效。你要做的是检查「有效角色数组里有没有任意一个角色出现在display_title中」,这时候得用Array.some()方法来遍历数组做判断。严重的SQL注入风险
你用字符串拼接"${rolecheckemail}"来构造SQL语句,这是非常危险的操作,恶意用户可以通过构造特殊邮箱字符串来篡改你的SQL查询,窃取或破坏数据。必须用参数化查询来解决这个问题。
修正后的完整代码
// 先导入角色配置文件(替换成你的实际文件路径) const rolesConfig = require('./role-config.js'); connection.connect(function(err) { // 先处理数据库连接错误 if (err) { console.error('数据库连接失败:', err); return res.send("Not Valid"); } // 使用参数化查询避免SQL注入,?是占位符 const sqlQuery = 'SELECT display_title FROM user WHERE username = ?'; // 把查询参数放在数组里传递,这是安全的做法 connection.query(sqlQuery, [rolecheckemail], function (err, result, fields) { // 处理查询错误 if (err) { console.error('查询用户信息出错:', err); return res.send("Not Valid"); } // 检查是否查询到了用户 if (!result || result.length === 0) { return res.send("Not Valid"); } const userDisplayTitle = result[0].display_title; const validRoles = rolesConfig.roles.valid; // 检查display_title是否包含任一有效角色 const isRoleValid = validRoles.some(role => userDisplayTitle.includes(role)); // 根据判断结果返回响应 res.send(isRoleValid ? "Valid" : "Not Valid"); }); });
额外说明
- 如果你的需求是display_title必须严格等于某个有效角色(而不是包含),只需要把
userDisplayTitle.includes(role)改成userDisplayTitle === role即可。 - 代码里添加了多层错误处理,避免因为数据库连接失败、查询出错或者没有找到用户这些情况导致程序崩溃。
内容的提问来源于stack exchange,提问作者SOHAM SHARMA
相关产品推荐
相关产品推荐

