Node.js:在不返回记录的SQL查询上:TypeError:无法读取未定义的属性

时间:2018-08-30 18:13:42

标签: javascript mysql node.js discord.js

更新:工作正常请参见底部。

我有这个小脚本,它使用用户在不和谐频道(upperArgs)中提供的变量,使用node.js进行SQL查询。这个想法是它在控制台中打印找到的数据,如果查询为空,则在控制台中打印“无记录”。

如果查询找到记录,效果很好,但是如果找不到,我仍然会得到

  

TypeError:无法读取未定义的属性“ registered_owner”

我尝试了多种解决方案,例如将concat分为两个单独的查询,甚至更多,但是似乎无法停止抛出此错误。

client.on('message', async message => {
	//Then ignores them if they are from another bot. 
if (message.author.bot) return;
  // Or if they don't have our specified prefix
if (message.content.indexOf(config.prefix) !== 0) return;
	// Or if they aren't in our specified channel
if (message.channel.id === (config.channelid)) {

	// Strips prefix, lowercases command, uppercases args to match db value.
const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
const upperArgs = args.map(arg => arg.toUpperCase());

var platequery = "SELECT CONCAT(firstname,' ', lastname) AS registered_owner FROM essentialmode.users where identifier = (Select owner FROM essentialmode.owned_vehicles where plate = '" + upperArgs + "')";

if (command === 'check') {

    var tag = await con.query(platequery, function(err, result) {
      if (err) throw err
      if (tag !== undefined)
      {
       var platedata = (result[0].registered_owner);
        console.log(platedata);
      }
      else console.log("Not found")
    });
  }
}
});

更新:使用result.length

进行工作

if (command === 'check') {

    var tag = await con.query(platequery, function(err, result) {
      if (err) throw err
      if (result.length > 0) {
        if (result)
          console.log("Registerd to " + result[0].registered_owner)
      }
      else console.log('Stolen');
    });
  }

2 个答案:

答案 0 :(得分:1)

在尝试访问result的属性之前,应检查result是否具有[0]元素,然后检查result_0中是否包含registered_owner。

或者,您可以使用lodash之类的方法来做_.get(result,'[0].registered_owner',null)

  if (typeof tag !== "undefined")
  {
   var platedata = result.length > 0 
     ? 'registered_owner' in result[0]
       ? (result[0].registered_owner) 
       : null
     : null ;
   console.log(platedata);
  }

答案 1 :(得分:0)

if (command === 'check') {

    var tag = await con.query(platequery, function(err, result) {
      if (err) throw err
      if (result.length > 0) {
        if (result)
          console.log("Registerd to " + result[0].registered_owner)
      }
      else console.log('Stolen');
    });
  }