Ошибка в синтаксисе SQL с использованием Node.js

0

Я сам начал 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>

Я считаю, что есть что-то, связанное с одинарной цитатой или обратным тиком. Но я не оборачиваюсь.

Теги:
cheerio

1 ответ

2
Лучший ответ

Если вы можете использовать ES6, напишите запрос вставки следующим образом:

const product = {
         category,
         name,
         thumbnail,
         url,
         price
      };
connection.query("INSERT INTO healthcare_products SET ?", product, () => {...})

Вы можете увидеть пример здесь
О вашей второй ошибке, потому что вы делаете .each() и в each() вы закрываете свой пул с помощью pool.end(). Просто удалите его и добавьте после выполнения вашей работы.
Чтобы использовать пул, вы можете сделать connection.release(); как он говорит здесь

  • 0
    это хорошее предложение. Будет иметь это в виду для будущего использования. Во всяком случае, это не проблема. Я немного отредактировал вопрос
  • 0
    @JimitPatel добавил ответ на вашу вторую проблему
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню