Javascript TypeError:无法读取属性';用户名';未定义的|节点和节点mysql

Javascript TypeError:无法读取属性';用户名';未定义的|节点和节点mysql,javascript,node.js,express,node-mysql,Javascript,Node.js,Express,Node Mysql,这让我困惑了一段时间,真的不知道发生了什么。我使用node-MySQL模块从MySQL中获取数据,当结果准备好后,我将控制台记录它们并清楚地看到结果 var sql = 'SELECT \ id, username, first_name, last_name \ FROM users\ WHERE username = ' + mysql.escape(req.params.username) + ''; pool.query(sql, function(err, result) { i

这让我困惑了一段时间,真的不知道发生了什么。我使用node-MySQL模块从MySQL中获取数据,当结果准备好后,我将控制台记录它们并清楚地看到结果

var sql = 'SELECT \
id, username, first_name, last_name \
FROM users\
WHERE username = ' + mysql.escape(req.params.username) + '';

pool.query(sql, function(err, result) {
  if (err) throw err;
  console.log(result[0]); //Object that contains all the fetched fields
  if ((result[0].username).toLowerCase() == (req.params.username).toLowerCase()) {
    console.log("We got a username!");
    profile.userData = result[0];
    profile.isAvailable = true;
    profile.theme = getProfileSexTheme(profile.userData.sex);
  } else {
    console.log("We dont have a username");
  }
  renderPage(profile);
});
实际误差:

TypeError: Cannot read property 'username' of undefined
    at Query.<anonymous> (/var/www/vhosts/MyWebApp/routes/profile.js:24:23)
    at Query._callback (/var/www/vhosts/MyWebApp/node_modules/mysql/lib/Pool.js:134:8)
    at Query.Sequence.end (/var/www/vhosts/MyWebApp/node_modules/mysql/lib/protocol/sequences/Sequence.js:78:24)
    at Query._handleFinalResultPacket (/var/www/vhosts/MyWebApp/node_modules/mysql/lib/protocol/sequences/Query.js:143:8)
    at Query.EofPacket (/var/www/vhosts/MyWebApp/node_modules/mysql/lib/protocol/sequences/Query.js:127:8)
    at Protocol._parsePacket (/var/www/vhosts/MyWebApp/node_modules/mysql/lib/protocol/Protocol.js:202:24)
    at Parser.write (/var/www/vhosts/MyWebApp/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/var/www/vhosts/MyWebApp/node_modules/mysql/lib/protocol/Protocol.js:37:16)
    at Socket.<anonymous> (/var/www/vhosts/MyWebApp/node_modules/mysql/lib/Connection.js:72:28)
    at Socket.EventEmitter.emit (events.js:95:17)
那未定义的是如何到达那里的?如果我注释
console.log(结果[0])
,它不会出现,但是这个控制台日志实际上输出了包含查询结果的对象(就在我们可以看到的GET之前)

我还尝试在页面加载后通过AJAX调用查询,结果成功了(但我想通过后端完成初始页面加载)


关于如何进一步排除故障,有什么建议吗?

昨晚看到了。然后,就像现在一样,我不知道你的错误在哪里出现。是否在控制台输出中?相对于其他控制台输出,它出现在输出中的什么位置?更一般地说,您对
console.log(result[0])
的注释会抑制未定义的输出,这让我觉得出于某种原因,它会再次被调用。将其更改为log just
result
,查看有什么内容。此外,您可能会发现连接选项中的设置
debug:true
很有帮助,因为它可以让您完全了解发出的查询(尽管很详细)。谢谢,debug真的很有帮助。我看到查询运行了两次。页面呈现后,它会再次运行,并使用
调用查询,其中username=\'{$value[\\\\'thumbnail\\\']}\'''}
,(页面中有旧PHP,而不是im迁移到节点/ejs),然后console.log输出
未定义的
,然后节点崩溃。我不知道为什么它会运行两次,似乎app.js中的
app.get('/profile/:username'
我在app.js中调用的不是我去mySite.com/profile/username时调用的。它现在可以正常工作了。中有一些HREF,你能给我们显示要渲染的代码吗()?该问题已修复,它位于.ejs文件中,有东西使页面呈现了两次,第二次向mysql查询传递了错误的值,导致节点崩溃。
{ id: 24,
  username: 'Anna304',
  first_name: 'Anna',
  last_name: 'Pell' }
We got a username!

(These gets don't come from the console log but from node)
GET /profile/Anna304 77ms
GET /profile/style.css 80ms

undefined