node.js:在不返回记录的sql查询上:typeerror:无法读取未定义的属性

jckbn6z7  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(320)

更新:开始工作见下。
我有一个小脚本,它将使用node.js,使用用户在discord通道(upperargs)中提供的变量进行sql查询。其思想是在控制台中打印找到的数据,如果查询为空,则在控制台中打印“no record”。
如果查询找到一条记录,效果会很好,但是如果没有,我仍然会得到
typeerror:无法读取未定义的属性“registered\u 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');
    });
  }
bvhaajcl

bvhaajcl1#

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');
    });
  }
p3rjfoxz

p3rjfoxz2#

在尝试访问其属性之前,您应该检查结果是否有[0]元素,然后检查结果[0]中是否有注册的\u所有者。
或者,你也可以使用像lodash和do这样的东西 _.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);
}

相关问题