【问题标题】:Node.js mysql import query result outside function [duplicate]Node.js mysql在函数外导入查询结果[重复]
【发布时间】: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

我解决这个问题的时间超过一个月,我浏览了很多页面,stackoverflow 上的问题,我找不到有效的解决方案。

【问题讨论】:

  • 您在执行查询之前响应输出。你应该在回调中移动res.write

标签: javascript node.js node-mysql


【解决方案1】:

你不能写这样的代码,我建议你阅读回调文档并学习如何在节点中使用异步

你的代码应该这样写:

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,不。
  • 是的,你是对的,我修复了这个示例以获得更好的体验
猜你喜欢
  • 2013-05-13
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 2013-08-24
  • 1970-01-01
  • 2019-11-20
相关资源
最近更新 更多