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 并在网页中显示结果

如何在node.js中将mysql查询的结果输出为json文件

node.js 从 mysql 查询中获取结果

如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?

MySQL 查询在 phpMyAdmin 中返回的 node-mysql 中缺少结果

node.js 中意外的保留字导入