使用Node.js的SQL语法错误
我今天已经启动了Node.js.我只使用cheerio
和mysql
制作了一个简单的爬虫。我得到了奇怪的错误,可能是因为我是新手,但我从过去4小时内没有任何出路 -
var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app = express();
var mysql = require('mysql');
var pool = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "crawler",
multipleStatements: true
});
pool.connect();
for (var i = 1; i <= 21; i++) {
request({
url: 'https://localhost/medicaljournal/category/medical-diagnostic-equipment/' + i
}, function(error, response, body) {
if (!error) {
var $ = cheerio.load(body);
var data = $('li.span2.list_product_item')
.each(function(index, element) {
var category = 'medical equipments';
var url = $(element).find('div.search-img.img-polaroid').parent().find('a').attr('href');
var thumbnail = $(element).find('div.search-img.img-polaroid').parent().find('img').attr('src');
var name = $(element).find('a.productName.clearfix').parent().text().trim();
var price = $(element).find('p.price').parent().text().trim();
var product = [
category,
name,
thumbnail,
url,
price
];
var query = "INSERT INTO healthcare_products (`category`, `name`, `image`, `url`, `cost`) VALUES (?, ?, ?, ?, ?)";
console.log(product);
pool.connect(function(err, callback) {
pool.query(query, product, function(err, result) {
if (err) {
throw err;
}
console.log('result{' + index + '}=>' + result);
pool.end();
});
});
});
} else {
console.log('error=>' + error);
}
});
}
我收到的错误是 -
result{0}=>[object Object]
result{1}=>[object Object]
events.js:183
throw er; // Unhandled 'error' event
^
Error: Cannot enqueue Quit after invoking quit.
at Protocol._validateEnqueue (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Protocol.js:204:16)
at Protocol._enqueue (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Protocol.js:139:13)
at Protocol.quit (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Protocol.js:92:23)
at Connection.end (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\Connection.js:249:18)
at Query._callback (C:\Users\jimit\Data\Work\Projects\express_demo\server.js:48:34)
at Query.Sequence.end (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\sequences\Sequence.js:88:24)
at Query._handleFinalResultPacket (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\sequences\Query.js:139:8)
at Query.OkPacket (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\sequences\Query.js:72:10)
at Protocol._parsePacket (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Protocol.js:279:23)
at Parser.write (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Parser.js:76:12)
at Connection.query (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\Connection.js:208:25)
at Handshake._callback (C:\Users\jimit\Data\Work\Projects\express_demo\server.js:43:30)
at Handshake.Sequence.end (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\sequences\Sequence.js:88:24)
at C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Protocol.js:225:14
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
PS C:\Users\jimit\Data\Work\Projects\express_demo>
我相信有一些与单引号或后退相关的内容。但我没有任何解决方法。
回答如下:如果你可以使用ES6,写这样的插入查询:
const product = {
category,
name,
thumbnail,
url,
price
};
connection.query("INSERT INTO healthcare_products SET ?", product, () => {...})
你可以看到例子here
关于你的第二个错误,那是因为你正在制作.each()
,而在each()
你用pool.end()
关闭游泳池。只需删除它并在完成工作后添加。
为了继续使用游泳池,你可以像connection.release();
一样制作here
使用Node.js的SQL语法错误
我今天已经启动了Node.js.我只使用cheerio
和mysql
制作了一个简单的爬虫。我得到了奇怪的错误,可能是因为我是新手,但我从过去4小时内没有任何出路 -
var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app = express();
var mysql = require('mysql');
var pool = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "crawler",
multipleStatements: true
});
pool.connect();
for (var i = 1; i <= 21; i++) {
request({
url: 'https://localhost/medicaljournal/category/medical-diagnostic-equipment/' + i
}, function(error, response, body) {
if (!error) {
var $ = cheerio.load(body);
var data = $('li.span2.list_product_item')
.each(function(index, element) {
var category = 'medical equipments';
var url = $(element).find('div.search-img.img-polaroid').parent().find('a').attr('href');
var thumbnail = $(element).find('div.search-img.img-polaroid').parent().find('img').attr('src');
var name = $(element).find('a.productName.clearfix').parent().text().trim();
var price = $(element).find('p.price').parent().text().trim();
var product = [
category,
name,
thumbnail,
url,
price
];
var query = "INSERT INTO healthcare_products (`category`, `name`, `image`, `url`, `cost`) VALUES (?, ?, ?, ?, ?)";
console.log(product);
pool.connect(function(err, callback) {
pool.query(query, product, function(err, result) {
if (err) {
throw err;
}
console.log('result{' + index + '}=>' + result);
pool.end();
});
});
});
} else {
console.log('error=>' + error);
}
});
}
我收到的错误是 -
result{0}=>[object Object]
result{1}=>[object Object]
events.js:183
throw er; // Unhandled 'error' event
^
Error: Cannot enqueue Quit after invoking quit.
at Protocol._validateEnqueue (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Protocol.js:204:16)
at Protocol._enqueue (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Protocol.js:139:13)
at Protocol.quit (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Protocol.js:92:23)
at Connection.end (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\Connection.js:249:18)
at Query._callback (C:\Users\jimit\Data\Work\Projects\express_demo\server.js:48:34)
at Query.Sequence.end (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\sequences\Sequence.js:88:24)
at Query._handleFinalResultPacket (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\sequences\Query.js:139:8)
at Query.OkPacket (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\sequences\Query.js:72:10)
at Protocol._parsePacket (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Protocol.js:279:23)
at Parser.write (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Parser.js:76:12)
at Connection.query (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\Connection.js:208:25)
at Handshake._callback (C:\Users\jimit\Data\Work\Projects\express_demo\server.js:43:30)
at Handshake.Sequence.end (C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\sequences\Sequence.js:88:24)
at C:\Users\jimit\Data\Work\Projects\express_demo\node_modules\mysql\lib\protocol\Protocol.js:225:14
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
PS C:\Users\jimit\Data\Work\Projects\express_demo>
我相信有一些与单引号或后退相关的内容。但我没有任何解决方法。
回答如下:如果你可以使用ES6,写这样的插入查询:
const product = {
category,
name,
thumbnail,
url,
price
};
connection.query("INSERT INTO healthcare_products SET ?", product, () => {...})
你可以看到例子here
关于你的第二个错误,那是因为你正在制作.each()
,而在each()
你用pool.end()
关闭游泳池。只需删除它并在完成工作后添加。
为了继续使用游泳池,你可以像connection.release();
一样制作here