无法使nodejs mysql查询结果成为全局变量

时间:2018-02-19 16:55:55

标签: javascript mysql node.js

我正在尝试使用mysql模块从mysql数据库中获取一些数据,然后将其写入HTML页面,但它似乎陷入了查询函数本身。 代码如下所示:

rooms = [];

var mysql = require('mysql');

var con = mysql.createConnection({
    host: "localhost",
    user: "MYUSERNAME",
    password: "MYPASSWORD",
    database: "travel"
});

con.connect(function(err) {
    if (err) throw err;
    con.query("SELECT * FROM rooms", function (err, result, fields) {
        if (err) throw err;
        var rooms = result;
        console.log(rooms[9]);
    });
});

console.log(rooms);

第一个console.log正确输出结果,但第二个返回第一行中声明的空数组并首先打印。我是Javascript的新手所以我可能错过了一些非常明显的东西。提前谢谢。

4 个答案:

答案 0 :(得分:1)

我认为你正在重新创建另一个变量,因为之前添加了“var”。没有它你试过吗?

如果它不起作用,这里是另一个可行的解决方案:

global.rooms = [];
global.rooms = result;

https://nodejs.org/api/globals.html#globals_global

答案 1 :(得分:0)

var rooms = [];

var mysql = require('mysql');

var con = mysql.createConnection({
    host: "localhost",
    user: "MYUSERNAME",
    password: "MYPASSWORD",
    database: "travel"
});

con.connect(function(err) {
    if (err) throw err;
    con.query("SELECT * FROM rooms", function (err, result, fields) {
        if (err) throw err;
        rooms = result;
        console.log(rooms[9]);
    });
});

console.log(rooms);

你错过了将房间宣布为全局变量。

答案 2 :(得分:0)

使用回调函数的方法

rooms = [];

var mysql = require('mysql');

var con = mysql.createConnection({
    host: "localhost",
    user: "MYUSERNAME",
    password: "MYPASSWORD",
    database: "travel"
});


function query(callback) {
  con.connect(function(err) {
      if (err) throw err;
      con.query("SELECT * FROM rooms", function (err, result, fields) {
          if (err) throw err;
          var rooms = result;
          callback(rooms);
          console.log(rooms[9]);
      });
  });
}

function log_it_out() {
  console.log(rooms);
}

query(log_it_out);

答案 3 :(得分:0)

我认为这对您来说不再重要,因为距您问这个基本问题已经有大约一年的时间了,但是搜索其他问题的人可能会发现此信息有用,因为我遇到了同样的问题。

**} else if(req.url === "/api/labeat") {
    res.writeHead(200, {"Content-Type": "application/json"});
    res.end(JSON.stringify(information));**

重要 当您尝试将变量声明旁边的内容返回到网站时,使用 res.end(); 时,请确保将结果或您要使用的任何类型的信息转换为字符串或缓冲区,因为res.end()需要字符串或缓冲区。还要像我一样指定Content-Type(application / json)。