mysql - 如何在node.js中实现promise代码片段来代替Mysql客户端

标签 mysql node.js promise async-await

我寻求解决方案的原始目的是因为,我想使用 Observables,因为我想获取有关 Angular UI 的实时数据。但这里的问题是我收到 sql 错误 --> Too much sql links 。所以我需要每次查询命中数据库后关闭连接。我的代码中没有发生这种情况。所以我搜索了可用的代码并找到了这个 -

https://codeburst.io/node-js-mysql-and-promises-4c3be599909b

nodejs 代码 -

 const mysql = require( 'mysql' );
  class Database {
   constructor( config ) {
    this.connection = mysql.createConnection( config );
    }
   query( sql, args ) {
    return new Promise( ( resolve, reject ) => {
        this.connection.query( sql, args, ( err, rows ) => {
            if ( err )
                return reject( err );
            resolve( rows );
        } );
     } );
    }
   close() {
    return new Promise( ( resolve, reject ) => {
        this.connection.end( err => {
            if ( err )
                return reject( err );
            resolve();
        } );
    } );
    }
    }

现在我想在我的nodejs文件中实现上面的代码,其代码是这样的 -

[来 self 的角度的http请求首先命中controller.js文件,然后从那里命中service.js文件]

已更新

dashboard.controller.js

  var express = require('express');
  var router = express.Router();
  var dashboardService = require('../../services/SYSTEM
   /dashboard.service');
   var app = express();


    router.post('/abcEntireSuccess',abcEntireSuccess);

    module.exports = router;




  function abcEntireSuccess(req, res) {


    dashboardService.abcEntireSuccess(req.body)
          .then(function (result) {
          if (result.length > 0) {
            console.log("we get data in node :: " + 
        Object.values(result));
            console.log(result.length + " record found  ");
            res.send(result);
           } 
         else {
            result=[];
            res.send(result);
         }
       })
       .catch(function (err) {
        res.status(400).send(err);
        console.log("some error occured");
       });
       }

dashboard.service.js

    var mysql = require('mysql');
    var Q = require('q');
    var express = require('express');
    var service = {};
    var config = require('../../config.json');
    const async = require('async');


       service.abcEntireSuccess = abcEntireSuccess;

        module.exports = service;


 function abcEntireSuccess() {

  var sqlQuery = `select * from TRANSACTION_PAYLOAD where INTERFACE_NAME =  
   'abc' AND (STATUS ='SUCCESS_RESPONSE')`



    var deferred = Q.defer();



    var host = config.host;
    var user = config.user;
    var password = config.password;
    var database = config.database;


     var con = mysql.createConnection({
     host: host,
     user: user,
     password: password,
     database: database
       });


      con.connect(function (err) {
       if (err) deferred.reject(err.name + ': ' + err.message);

       con.query(sqlQuery,
           function (err, result, fields) {
            if (err) deferred.reject(err.name + ': ' + err.message);

            console.log("my result => ",result);

            deferred.resolve(result);

        });


       })

     console.log(" deferred.promise; ");
    return deferred.promise;



  }

请帮助实现。

@skipperhoa

已更新

当我实现你的代码时...我在 Angular UI 即 html 中收到此错误,

发布http://localhost:8096/dashboard/abcEntireSuccess/ 404(未找到)

请帮忙解决

最佳答案

您可以在代码后尝试以下操作

//dashboard.controller.js
var express = require('express')
var router = express.Router()
var dashboardService = require('./dashboard.service.js');

router.get('/test2',function(req,res){
  console.log(dashboardService.abcEntireSuccess());
});

module.exports = router


//dashboard.service.js
var mysql = require('mysql');
var express = require('express');
var config = require('../config/config.json');
var exports = module.exports = {};

exports.abcEntireSuccess = function() {
    const db = new Database(config);
    db.query( 'SELECT * FROM users' ).then( rows => {
        return rows;
    } );
db.close();
};

class Database {
    constructor( config ) {
        this.connection = mysql.createConnection( config.values);
    }
    query( sql, args ) {
        return new Promise( ( resolve, reject ) => {
            this.connection.query( sql, args, ( err, rows ) => {
                if ( err )
                    return reject( err );
                console.log(rows);
                resolve( rows );
            } );
        } );
    }
    close() {
        return new Promise( ( resolve, reject ) => {
            this.connection.end( err => {
                if ( err )
                    return reject( err );
                resolve();
            } );
        } );
    }
 }  
//congfig/config.json
{
    "values" : {
        "host" : "localhost",
        "user" : "root",
        "password" : "",
        "database" : "demo"
    }
}

关于mysql - 如何在node.js中实现promise代码片段来代替Mysql客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51098895/

相关文章:

mysql - 该程序在 MySQL 5 中有效,但在 MySQL6 中失败,为什么?

mysql - SQL select user grouped by ip 并在一个表中选择具有相同ips的所有其他用户

javascript - 关于如何与 Mongoose 创建关系的简单说明

javascript - Mongoose 嵌入式文档更新

javascript - 以 block 的形式运行 HTTP 请求

javascript - Axios 总是以无效的 url 运行 .then

mysql - 更新行中具有不同值的列

php - MySQL:添加排序列

node.js - 一个简单的 Node Web 服务器

javascript - Node.js 原生 Promise.all 是并行处理还是顺序处理?