mysql查询在nodeJS中返回undefined

时间:2017-11-16 13:35:50

标签: php mysql node.js

此代码返回错误,因为'结果(mysql.query)'返回未定义的值。我使用mysql命令shell创建了一个7~10行的数据库表,数据库可以从workbench和命令shell中完美地工作。是因为我以错误的方式安装了mysql?或代码错误?我在不同的计算机上测试了相同的东西,它从那里完美地工作,突然间它不起作用。我没有复制文件,只是从内存中写入/输入相同的内容。

我已经搜索过stackoverflow了,似乎每个人都在谈论异步问题,这在我的情况下并不是真的。(同样的事情在以前工作过)

使用npm install mysql, mysql版本是社区5.7

crudserver.js(主文件)

event

crudlist.ejs

const fs = require("fs"); //filesystem
const ejs = require("ejs");
const mysql = require("mysql");
const express = require("express"); //handles all the middlewares
const bodyParser = require("body-parser"); //handles "POST"

const client = mysql.createConnection({
  user:"****",
  password:"****",
  database:"testdb"
});

let app = express();
app.use(bodyParser.urlencoded({
  extended:false
}));

app.listen(52273, function(){
  console.log("server running at http://127.0.0.1:52273");
});

app.get("/",function (request,response){
  fs.readFile("crudlist.ejs","utf8",function(error,data){
    client.query("SELECT * FROM products", function(error,results){
      response.send(ejs.render(data,{
        data:results,
        mytitle:"title1",
        mytitlesub:"title2"
      }));
    });
  });
});

它说'数据'未定义。

无法读取属性' forEach'未定义的     在eval(eval at compile(F:\ mycoding \ node_modules \ ejs \ lib \ ejs.js:549:12),:17:12)     at returnedFn(F:\ mycoding \ node_modules \ ejs \ lib \ ejs.js:580:17)     at Object.exports.render(F:\ mycoding \ node_modules \ ejs \ lib \ ejs.js:384:37)     在Query._callback(F:\ mycoding \ crudserver.js:25:25)     在Query.Sequence.end(F:\ mycoding \ node_modules \ mysql \ lib \ protocol \ sequences \ Sequence.js:88:24)     在F:\ mycoding \ node_modules \ mysql \ lib \ protocol \ Protocol.js:398:18     at Array.forEach(native)     在F:\ mycoding \ node_modules \ mysql \ lib \ protocol \ Protocol.js:397:13     at _combinedTickCallback(internal / process / next_tick.js:73:7)     at process._tickCallback(internal / process / next_tick.js:104:9)

2 个答案:

答案 0 :(得分:1)

如果dataundefined,您很可能会遇到一个您决定不会处理的错误:

// note the first parameter of callback function - "error"
client.query("SELECT * FROM products", function(error,results){

您应该测试error是否存在,并且仅在结果不存在的情况下呈现结果。

答案 1 :(得分:0)

问题解决了:重新安装了mySQL。设置端口默认为3306.我在安装时将端口设置为一些自定义数字,这是问题的真正原因。除非有必要,否则不要从3306更改端口号。