标签: node-mysql

使用app.get(..)路由后,Express JS'this'未定义

我有一个基本的Node JS服务器,它被设计用作API,我创建了一个日志和数据库模块,我已经开始添加其他模块来处理不同的请求类型.

我正在使用Express.js和node-mysql

当我访问时,/v1/group我收到以下错误 -

TypeError: Cannot read property 'database' of undefined
    at Group.getAll (C:\code\javascript\node\api\api\v1\groups.js:12:23)
    at callbacks (C:\code\javascript\node\api\node_modules\express\lib\router\index.js:161:37) ...
Run Code Online (Sandbox Code Playgroud)

所以我recieving的请求,并调用后猜测group.getAll()this是不确定的,但我不明白为什么,有没有一种方法来设置this或已结构我我的应用程序都错了吗?

sever.js

"use strict";

var Express = require('express');
var Log = require('./database/log');
var Database = require('./database/database');
var dbConfig = require('./dbconfig.json');

var Group = require('./api/v1/groups');


//Init express
var app = new Express();

//Init log and database
var log = new Log();
var database = new Database(dbConfig, log);

var initCallback = function() {
    //Init routes …
Run Code Online (Sandbox Code Playgroud)

javascript node.js express node-mysql

10
推荐指数
1
解决办法
3288
查看次数

插入多个值时节点mysql上的'ER_PARSE_ERROR'

我正在尝试使用节点中的node-mysql将多个值放入数据库.我的源代码

engine.files.forEach(function(file) {
  torrentpath = file.path.replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;").replace(/\\/g, "/");
  torrentFiles.push([
    result.insertId,
    torrentpath,
    file.length
  ]);
});

console.log(torrentFiles);

app.mysql.query('INSERT INTO `files` (`torrentid`, `filename`, `filesize`) VALUES ?', torrentFiles, function(err, result) {
  if (err) throw err;
});
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

[ [ 11, 'ubuntu-14.04-desktop-amd64.iso', 1010827264 ] ]

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '11, 'ubuntu-14.04-desktop-amd64.iso', 1010827264' at line 1
    at Query.Sequence._packetToError (C:\wamp\www\sleepytorrentdownload\src\node_modules\mysql\lib\protocol\sequences\Sequence.js:30:14) …
Run Code Online (Sandbox Code Playgroud)

mysql sql node.js node-mysql

10
推荐指数
1
解决办法
2万
查看次数

使用node-mysql和ExpressJS在一个请求中执行两个或多个查询

tl; dr:使用带有ExpressJS的node-mysql处理MySQL数据库的两个或多个异步查询的正确方法是什么?

我使用带有node-mysql的ExpressJS在MySQL数据库上执行两个独立的,不相关的数据库查询.由于响应是异步的,我正在嵌套查询,这意味着它们最终会一个接一个地发生.

这似乎是一种丑陋,缓慢且通常不好的方法,特别是如果我要添加第三或第四个查询.

var mysql      = require('mysql');
var credentials = {...}

router.get('/api/url/', function (req, res) {
    return_data = {}
    var connection = mysql.createConnection(credentials);
    query1 = "SELECT column1 FROM table1 WHERE column2 = 'foo'";
    query2 = "SELECT column1 FROM table2 WHERE column2 = 'bar'";
    connection.query(query1, {}, function(err, results) {
        return_data.table1 = results;
        connection.query(query2, {}, function(err, results) {
            return_data.table2 = results;
            connection.end();
            res.send(return_data);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

mysql node.js express node-mysql

9
推荐指数
2
解决办法
9096
查看次数

Node-MySQL 上的连接过多

Too many connections当 INSERT IGNORE INTO 循环中有很多项目时,我会收到错误消息。

function insertCases(cases) {
    for(var i in cases) {
        var thequery = 'INSERT IGNORE INTO `cases` SET keysused='+cases.keysused+' 
        pool.query(thequery, function(ee, rr) {
            if(ee) {
                logger.info(ee);
                throw ee;
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

当现在有 100 多个案例时,INSERT IGNORE INTO 比我获得太多连接的次数要多 100 次。我不知道它到底崩溃了多少,但有 100 次它就可以工作了。

我读到的是,该查询运行查询并在完成后关闭连接,所以我读到,我不需要在之后关闭它。

如果我运行 100,等待很短的时间并再次运行 100,依此类推,则不会出现连接过多的错误。

只有当一次运行这么多时间时。

这是我的数据库设置

var db_config = {
    connectionLimit : 5000,
    host: 'localhost',
    user: 'userexample',
    password: '*******',
    database: 'example.com'
};
Run Code Online (Sandbox Code Playgroud)

这就是 createPool 的功能。

function database_connection() {
pool = mysql.createPool(db_config);
pool.getConnection(function(err, …
Run Code Online (Sandbox Code Playgroud)

mysql connection-pooling node-mysql

9
推荐指数
1
解决办法
6816
查看次数

Node.js和mysql回调:查询回调中的查询

我想要做的就是插入一些数据,如果我的数据库没有,那么我将Insert SQL放入我的Select SQL的回调函数中,但是我得到了这样的错误:

{[错误:在调用quit后无法将查询排入队列.]代码:'PROTOCOL_ENQUEUE_AFTER_QUIT',致命:false}

我的代码片段在这里:

db.query('SELECT count(*) as Resultcount FROM tablename WHERE email = ? and password = ?', [post.email, post.password], function(error, result){
    if (result[0].Resultcount == 0){
        var query2 = db.query('INSERT INTO tablename SET ?', [post], function(err, result) {
            if(err){
              console.log(err);
           }
             console.log(result);
          });
    }
    else{
        console.log('have data already');
    }
});
Run Code Online (Sandbox Code Playgroud)

有人可以给我一些建议吗?谢谢

---- ----更新

实际上,select SQL的回调函数不是一个匿名函数,我的db.end()代码片段是这样的:

var QueryResults = new queryResultFuntion(Back_results);

    db.query('SELECT count(*) as Resultcount FROM tablename WHERE email = ? and password = ?', [post.email, post.password], QueryResults.queryResult );


    db.end();
Run Code Online (Sandbox Code Playgroud)

javascript mysql node.js node-mysql

8
推荐指数
1
解决办法
1万
查看次数

如何使用mysql数据库在node.js中创建登录表单

我是node.js的新手,我想使用express和mysql数据库创建一个登录页面,请与我分享您的想法与示例.

javascript mysql node.js express node-mysql

8
推荐指数
1
解决办法
5万
查看次数

node.js,express - 以同步方式在循环内一个接一个地执行mysql查询

在我的node.js,表达应用程序,我正在与superagent中间件进行ajax调用.该调用使用node-mysql中间件通过相当多的数据库查询来获取复杂数组中的数据库数据.

在粘贴代码之前,我试图用语言解释我想要做什么,尽管代码足以说明它想要做什么,并且第一次回调中的所有异步事件应该以同步方式完成.

说明:

在第一个查询的回调中,执行for循环以多次运行第二个查询,并且在每个循环之后,仅在第二个查询的回调完成后才调用下一个循环.下一个代码行的情况也是一样的.

码:

但是,您可以跳过 for循环的内部(在注释中标记),以便在需要时简化和简化.

conn.query("SELECT * FROM `super_cats`",function(error, results, fields) {   

        if(error){console.log("erro while fetching products for homepage "+ error);}

        for(var i in results) { // FIRST FOR LOOP INSIDE THE FIRST QUERY CALLBACK

            /*Innards of for loop starts*/    
            var elem = new Object();
            var supcat_id=results[i].id;
            elem.super_id =supcat_id;
            elem.cats=new Array();
            var cat= '';
            /*Innards of for loop ends*/ 

            conn.query("SELECT * FROM `categories` WHERE `supcat_id`="+supcat_id,function(error_cats, results_cats, fields_cats) {   

                if (error_cats) …
Run Code Online (Sandbox Code Playgroud)

asynchronous node.js express node-mysql

8
推荐指数
1
解决办法
8256
查看次数

node-mysql中单个(?)和双问号(??)有什么区别?

我相信这是相当明显的,对我来说,如果示例中的第二个双重问号是单个问号会更有意义.

从他们的文档:

或者,你可以使用?字符作为您希望转义的标识符的占位符,如下所示:

var userId = 1;
var columns = ['username', 'email'];
var query = connection.query('SELECT ?? FROM ?? WHERE id = ?', [columns, 'users', userId], function(err, results) {
  // ...
});

console.log(query.sql); // SELECT `username`, `email` FROM `users` WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

node-mysql

8
推荐指数
1
解决办法
3420
查看次数

如何将nodeJS集群与mySQL池集群一起使用?

快问

如果我创建一个包含4个worker(我的应用程序的4个实例)的节点集群应用程序,我应该使用mySQL池还是mysql池集群?如果我使用池,它将为每个应用程序创建一个池但如果我使用池集群,它将为每个应用程序创建4个池(总共16个).这是一个很好的实现还是会降低性能?

让我们举一个假的例子来说明我在问什么.我正在创建一个这样的nodeJS服务器应用程序.


首先,让我们为mysql数据库创建配置文件(重要的是我创建db worker的这个文件的最后一部分):

DBconfig.js

'use strict'
const mysql   = require('mysql'),
      workers = process.env.WORKERS || require('os').cpus().length,
      cluster = require('cluster');

//Local Database Settings
const local_settings = {
    user       : 'user',
    host       : '127.0.0.1',
    password   : 'pass',
    database   : 'dbname',
    debug      : false,
    dateStrings: true,
    connectionLimit     : 10,
    defaultSelector     : 'RR',
    multipleStatements  : true,
    removeNodeErrorCount: 1
};

let poolCluster = module.exports = mysql.createPoolCluster( local_settings );

//here I make one db worker for each app worker
for(let i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

node.js node-mysql mysql-cluster node-cluster

8
推荐指数
1
解决办法
1270
查看次数

pool.query()和pool.getGetConnection()在connection.release()上有何不同?

我可以理解每一个pool.query()都会花费一个连接,它会在结束时自动释放.基于这个关于github问题的评论.但是使用的嵌套查询pool.getConnection()呢?

pool.getConnection(function(err, connection) {

  // First query
  connection.query('query_1', function (error, results, fields) {

    // Second query
    connection.query('query_2', function (error, results, fields) {

          // Release the connection
          // DOES THIS ALSO RELEASE query_1?
          connection.release();

          if (error) throw error;

          // you can't use connection any longer here..
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

UPDATE

这是执行嵌套查询时使用事务的代码.

const pool = require('../config/db');

function create(request, response) {
   try {

       pool.getConnection(function(err, con) {

           if (err) {
               con.release();
               throw err;
           }

           con.beginTransaction(function(t_err) {

               if (t_err) …
Run Code Online (Sandbox Code Playgroud)

mysql connection-pooling node.js node-mysql

8
推荐指数
1
解决办法
5596
查看次数