使用 Node.js 的 SQL 语法错误

Error in SQL Syntax using Node.js

我今天开始 Node.js。我刚刚使用 cheeriomysql 制作了一个简单的爬虫。我遇到了奇怪的错误,可能是因为我是新手,但我在过去 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() 关闭了你的池。只需将其删除并在完成工作后添加即可。
要继续使用池,您可以像 here

那样制作 connection.release();