此代码返回错误,因为'结果(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)
答案 0 :(得分:1)
如果data
为undefined
,您很可能会遇到一个您决定不会处理的错误:
// note the first parameter of callback function - "error"
client.query("SELECT * FROM products", function(error,results){
您应该测试error
是否存在,并且仅在结果不存在的情况下呈现结果。
答案 1 :(得分:0)
问题解决了:重新安装了mySQL。设置端口默认为3306.我在安装时将端口设置为一些自定义数字,这是问题的真正原因。除非有必要,否则不要从3306更改端口号。