最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

使用Node.js的SQL语法错误

IT培训 admin 7浏览 0评论

使用Node.js的SQL语法错误

我今天已经启动了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()关闭游泳池。只需删除它并在完成工作后添加。 为了继续使用游泳池,你可以像connection.release();一样制作here

使用Node.js的SQL语法错误

我今天已经启动了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()关闭游泳池。只需删除它并在完成工作后添加。 为了继续使用游泳池,你可以像connection.release();一样制作here

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论