如何解决Express Server,使用参数作为查询输入时,MySQL查询中断
在Ubuntu VM上运行的Express Server。它连接到MySQL数据库并调用一个返回一些数据的过程。直到这部分,一切都很好:
var mysqlquery = 'CALL p_CategoriesSumRes(' + parseInt(req.params.resolution) + ',"2020-08-02 00:00:00")';
var mysqlquery = 'CALL p_CategoriesSumRes(' + 2 + ',"2020-08-02 00:00:00")';
在这两行之间,第二行工作得很好,但是第一行给了我这个错误:
Example app listening at http://localhost:8000
/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Parser.js:437
throw err; // Rethrow non-MySQL errors
^
Error: ER_BAD_FIELD_ERROR: Unknown column 'NaN' in 'field list'
at Query.Sequence._packetToError (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
at Query.ErrorPacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/sequences/Query.js:79:18)
at Protocol._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Protocol.js:291:23)
at Parser._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Parser.js:433:10)
at Parser.write (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Parser.js:43:10)
at Protocol.write (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Protocol.js:38:16)
at Socket.<anonymous> (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/Connection.js:88:28)
at Socket.<anonymous> (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/Connection.js:526:10)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
--------------------
at Protocol._enqueue (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Protocol.js:144:48)
at Connection.query (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/Connection.js:198:25)
at Handshake.<anonymous> (/home/rootuser/Desktop/HTML/project/tealeech/backend/app.js:34:9)
at Handshake.<anonymous> (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/Connection.js:526:10)
at Handshake._callback (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/Connection.js:488:16)
at Handshake.Sequence.end (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)
at Handshake.Sequence.OkPacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/sequences/Sequence.js:92:8)
at Protocol._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Protocol.js:291:23)
at Parser._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Parser.js:433:10)
at Parser.write (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Parser.js:43:10)
我测试了它,第一行的mysqlquery与第二行完全相同(连接到http://192.168.178.85:8000/2时)。 显然,我不会同时运行这两行。
这是什么魔咒?
var express = require('express')
var cors = require('cors');
var app = express();
const port = 8000;
var corsOptions = {
origin: 'http://192.168.178.85:3000',optionsSuccessStatus: 200 // some legacy browsers (IE11,various SmartTVs) choke on 204
}
app.get('/:resolution',cors(corsOptions),function(req,res) {
res.setHeader('response-type','text/plain');
const mysql = require('mysql');
var con = mysql.createConnection({
host: "IP ADDRESS",user: "user",password: "password",database: "DB"
});
con.connect(function(err) {
var mysqlquery = 'CALL p_CategoriesSumRes(' + parseInt(req.params.resolution) + ',"2020-08-02 00:00:00")'; //<========== DOESN'T WORK
var mysqlquery = 'CALL p_CategoriesSumRes(' + 2 + ',"2020-08-02 00:00:00")'; //<========== WORKS
if (err) throw err;
con.query(mysqlquery,function (err,result,fields) {
if (err) throw err;
var row = result[0];
res.send(JSON.stringify(row));
});
});
})
app.listen(port,() => {
console.log(`Example app listening at http://localhost:${port}`)
})
解决方法
好像您使用了错误的引号。
尝试
var mysqlquery = 'CALL p_CategoriesSumRes(' + parseInt(req.params.resolution) + ",'2020-08-02 00:00:00')";
var mysqlquery = 'CALL p_CategoriesSumRes(' + 2 + ",'2020-08-02 00:00:00')";
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。