gpt4 book ai didi

javascript - 为什么我的 Node 数据库查询不起作用

转载 作者:行者123 更新时间:2023-11-29 16:39:06 25 4
gpt4 key购买 nike

在 ndoe 和 mysql 交互中,我试图获取查询中 collunm 的数据,到目前为止我已经做了什么:groupmemberlist 是一个数组数组,我循环使用它来获取每个值。

%%编辑%%

我已经添加了这些更改,但我的变量仍然未定义:

    for (var m = 0; m < groupmemberlist.length; m++) {
var imgreturned = findpicture(groupmemberlist[m], returnimage);
console.log(imgtag);
}

这个循环可以实现findpicture函数:

   function returnimage(imgid) {
imgtag = '<img href="/uploads/' + imgid[0].User_Profile_Photo + ">";

}

function findpicture(id, callback) {
return new Promise(function (resolve, reject) {
db.query('SELECT User_Profile_Photo FROM users WHERE id = ?', [id], function (error, results, fields) {
if (error) {
throw error;
} else {
imgFromId = results;
}
callback(imgFromId);
});
})
}

我得到的错误是(重复4次):

Query {
domain: null,
_events:
{ error: [Function],
packet: [Function],
end: [Function],
timeout: [Function],
'start-tls': [Function] },
_eventsCount: 5,
_maxListeners: undefined,
_callback: [Function],
_callSite: Error
at Protocol._enqueue (C:\Users\yvyma.DESKTOP-74AK6UQ\Desktop\Nodeapp\express-cc\node_modules\mysql\lib\protocol\Protocol.js:144:48)
at Connection.query (C:\Users\yvyma.DESKTOP-74AK6UQ\Desktop\Nodeapp\express-cc\node_modules\mysql\lib\Connection.js:200:25)
at findpicture (C:\Users\yvyma.DESKTOP-74AK6UQ\Desktop\Nodeapp\express-cc\routes\index.js:210:31)
at Query.<anonymous> (C:\Users\yvyma.DESKTOP-74AK6UQ\Desktop\Nodeapp\express-cc\routes\index.js:232:35)
at Query.<anonymous> (C:\Users\yvyma.DESKTOP-74AK6UQ\Desktop\Nodeapp\express-cc\node_modules\mysql\lib\Connection.js:502:10)
at Query._callback (C:\Users\yvyma.DESKTOP-74AK6UQ\Desktop\Nodeapp\express-cc\node_modules\mysql\lib\Connection.js:468:16)
at Query.Sequence.end (C:\Users\yvyma.DESKTOP-74AK6UQ\Desktop\Nodeapp\express-cc\node_modules\mysql\lib\protocol\sequences\Sequence.js:83:24)
at Query._handleFinalResultPacket (C:\Users\yvyma.DESKTOP-74AK6UQ\Desktop\Nodeapp\express-cc\node_modules\mysql\lib\protocol\sequences\Query.js:139:8)
at Query.EofPacket (C:\Users\yvyma.DESKTOP-74AK6UQ\Desktop\Nodeapp\express-cc\node_modules\mysql\lib\protocol\sequences\Query.js:123:8)
at Protocol._parsePacket (C:\Users\yvyma.DESKTOP-74AK6UQ\Desktop\Nodeapp\express-cc\node_modules\mysql\lib\protocol\Protocol.js:278:23),
_ended: false,
_timeout: undefined,
_timer: Timer { _object: [Circular], _timeout: null },
sql: 'SELECT User_Profile_Photo FROM users WHERE id = 6 ',
values: [ 6 ],
typeCast: true,
nestTables: false,
_resultSet: null,
_results: [],
_fields: [],
_index: 0,
_loadError: null,
_connection:
Connection {
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
config:
ConnectionConfig {
host: '127.0.0.1',
port: 3306,
localAddress: undefined,
socketPath: undefined,
user: 'root',
password: undefined,
database: 'express-cc',
connectTimeout: 10000,
insecureAuth: false,
supportBigNumbers: false,
bigNumberStrings: false,
dateStrings: false,
debug: undefined,
trace: true,
stringifyObjects: false,
timezone: 'local',
flags: '',
queryFormat: undefined,
pool: undefined,
ssl: false,
multipleStatements: false,
typeCast: true,
maxPacketSize: 0,
charsetNumber: 33,
clientFlags: 455631,
protocol41: true },
_socket:
Socket {
connecting: false,
_hadError: false,
_handle: [Object],
_parent: null,
_host: null,
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 5,
_maxListeners: undefined,
_writableState: [Object],
writable: true,
allowHalfOpen: false,
_bytesDispatched: 151,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
_idleTimeout: -1,
_idleNext: null,
_idlePrev: null,
_idleStart: 9257,
_destroyed: false,
[Symbol(asyncId)]: 44,
[Symbol(bytesRead)]: 0,
[Symbol(asyncId)]: 47,
[Symbol(triggerAsyncId)]: 10 },
_protocol:
Protocol {
domain: null,
_events: [Object],
_eventsCount: 6,
_maxListeners: undefined,
readable: true,
writable: true,
_config: [Object],
_connection: [Circular],
_callback: null,
_fatalError: null,
_quitSequence: null,
_handshake: true,
_handshaked: true,
_ended: false,
_destroyed: false,
_queue: [Array],
_handshakeInitializationPacket: [Object],
_parser: [Object] },
_connectCalled: true,
state: 'authenticated',
threadId: 767 } }

我还尝试在查询函数中说 var imgname = (results[0].User_Profile_Photo) 并尝试 console.log var imgname 但它返回 var undefined 错误。

最佳答案

你的代码很困惑。你有些事情不合时宜。这是一个更好但并不完美的版本:

function findpicture(id) {
let imgFromId;

db.query('SELECT User_Profile_Photo FROM users WHERE id = ?', [id], function (error, results, fields) {
if (error) {
throw error;
}

imgFromId = results;
console.log(imgfromid);
});
}

现在,让我们解释一下您的代码有什么问题。它将为您提供一些需要理解的好概念。

db.query正在使用回调函数。这意味着它是 asyncronous要求。这意味着结果需要一些时间才能返回。您现在正在尝试通过分配 db.query 来做什么至imgFromId没有获取查询的结果,而只是分配对从 db.query 返回的任何内容的引用.

在我分享的修正版本中,需要定义imgFromId在回调函数之外。当结果返回时,您将结果分配给回调函数内的结果。

但是,这仍然无法解决您的问题。由于您正在处理异步代码,因此您需要研究 Promises 和 async/await。

关于javascript - 为什么我的 Node 数据库查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53438601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com