节点未履行的承诺和导入操作

时间:2019-02-24 18:28:04

标签: mysql node.js oop

MY代码的obj名称为SQLFeeter,它需要进行sql交互,从而将数据发布并传递给我,我有一个问题是一个导入。我尝试获取数据并传递数据时,通天塔无法正常工作

const express = require('express');
const router = express.Router();
const mysql = require('mysql')

/*
--------------------------------------
This will handel all get requests
--------------------------------------
*/
/* 
//sqlInteractuin test
const SqlDataGetter = require('../../sqlInteraction/GetData');
//import  SqlDataGetter  from "./sqlInteraction/GetData";
let SqlGetter = new SqlDataGetter
*/

class SqlDataGetter {
  constructor()
  {
    this.con = mysql.createConnection({
      host: "localhost",
      user: "XXX",
      password: "XXX",
      database: "APP"
    });
  }

  GetClients()
  {    
    let con = mysql.createConnection({
      host: "localhost",
      user: "XXX",
      password: "AAA",
      database: "APP"
    });
      let resultFromSql = null;   
      con.connect(function(err) {
          if (err) throw err;
          let sql_querry = "SELECT * FROM contacts"
          con.query(sql_querry , function (err, result, fields) {
              if (err) throw err;
              //console.log(fields);
              console.log(result);
              resultFromSql =  result;
          });
          return resultFromSql;
      });
  }
  Tester()
  {
      //return this.con
      //console.log(this.con)
      return 'hello world'
  }

}



router.get('/' , async (req , res) =>
{
    //Need to make an obj that take the data and do all the querys
    res.status(200).send("DataBack");
});

router.get('/Clients' , async (req , res) =>
{
  let sql_getter = new SqlDataGetter();
  const Clients = sql_getter.GetClients();
  console.log(Clients);
  SqlDataGetter.GetClients()
  res.status(200);
  res.send({ respond : Clients});
});

虽然我一开始尝试运行它,但是它可以独立运行,但是当我创建ajax请求时,它说GetClients不是函数。当我尝试使连接成为此对象的属性时,当我激活this.con.query undifend undifend属性查询时,将其作为this.con。

1 个答案:

答案 0 :(得分:0)

如果您使用promise-mysql而不是mysql,则会从方法调用中获得承诺,这将使使用起来更加容易:

const mysql = require('promise-mysql');

然后您的课程如下所示:

class SqlDataGetter {
  constructor() {
    this.conPromise = mysql.createConnection({
      host: "localhost",
      user: "XXX",
      password: "XXX",
      database: "APP"
    });
  }
  async GetClients() {
    const con = await this.conPromise;
    const result = await con.query("SELECT * FROM contacts");
    console.log(result);
    return result;
  }
}

最后,您将按如下方式使用该类:

router.get('/Clients' , async (req , res) => {
  let sql_getter = new SqlDataGetter();
  const clients = await sql_getter.GetClients();
  console.log(clients);
  res.status(200);
  res.send({ respond : clients});
});