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

Node.js中判断display_title是否包含JSON有效角色的语法问题

修正你的Node.js角色验证代码

咱先梳理下你代码里的几个关键问题,然后给你修正后的完整版本:

问题分析

  1. 角色配置引用错误
    你导出的配置是module.exports={ roles: { valid:["Area Director","Managing Director","Default"]}},如果导入时用的是类似const rolesConfig = require('./你的配置文件.js'),那正确的角色数组引用应该是rolesConfig.roles.valid,而不是代码里的roles.roles.valid(除非你导入时变量名就叫roles,但代码里没体现这一点)。

  2. 逻辑判断搞反了
    String.includes()是检查字符串里是否包含某个单个子串,你直接传一个数组进去肯定不生效。你要做的是检查「有效角色数组里有没有任意一个角色出现在display_title中」,这时候得用Array.some()方法来遍历数组做判断。

  3. 严重的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:17:51