Node.js mysql在函数外导入查询结果[重复]
Posted
技术标签:
【中文标题】Node.js mysql在函数外导入查询结果[重复]【英文标题】:Node.js mysql import query result outside function [duplicate] 【发布时间】:2021-12-31 10:41:55 【问题描述】:我正在制作一个网站,我需要从数据库中导入数据并稍后在程序中使用它。但是当我使用 npm 包mysql
时,我找不到任何方法来导入外部函数的查询结果以供以后使用。这是我的代码示例。
我从数据库中获取数据的功能:
let output;
dba.query('SELECT * FROM `movies-web`.movies;',(err, rows) =>
if(err)
throw err;
else
output = rows;
);
在代码中我这样使用它:
res.write(output);
但是变量output
返回undefined
。
我解决这个问题的时间超过一个月,我浏览了很多页面,*** 上的问题,我找不到有效的解决方案。
【问题讨论】:
您在执行查询之前响应输出。你应该在回调中移动res.write
【参考方案1】:
你不能写这样的代码,我建议你阅读回调文档并学习如何在节点中使用异步
https://nodejs.org/en/knowledge/getting-started/control-flow/what-are-callbacks/ https://www.w3resource.com/node.js/nodejs-programming-model.php https://***.com/a/19739852/6759368你的代码应该这样写:
dba.query('SELECT * FROM `movies-web`.movies;',(err, rows) =>
if(err)
throw err;
else
res.write(rows)
);
附注:
使用回调的更好场景:
const http = require('http');
function executeQuery(next)
dba.query('SELECT * FROM `movies-web`.movies;',(err, rows) =>
if(err)
console.error(err);
next(err);
return
next(null, rows);
);
const server = http.createServer(function (req, res)
executeQuery(function (error, output)
if (error)
res.writeHead(400);
res.end(error.message);
return;
res.writeHead(200);
res.end(JSON.stringify(output));
);
);
server.listen(8080);
【讨论】:
你不应该在异步回调中throw
,不。
是的,你是对的,我修复了这个示例以获得更好的体验以上是关于Node.js mysql在函数外导入查询结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在node.js中将mysql查询的结果输出为json文件
如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?