【问题标题】:Node unhandel promises and imports oop节点 unhandel 承诺和导入 oop
【发布时间】:2019-02-24 18:28:04
【问题描述】:

我的代码有一个 obj 名称 SQLFeeter,它需要进行 sql 交互,获取数据并传递它我有一些问题,这是一个导入。当我尝试获取数据并传递它时,babel 不起作用

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_query = "SELECT * FROM contacts"
          con.query(sql_query , 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 的这个对象的属性时,当我激活 this.con.query undifend 的 undifend 属性查询时。

【问题讨论】:

  • 使用promise-mysql 而不是mysql

标签: mysql node.js oop


【解决方案1】:

如果您使用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});
});

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 2016-05-17
    • 2021-12-23
    • 1970-01-01
    • 2017-05-08
    • 2014-03-23
    • 2018-12-09
    • 2016-09-08
    • 2016-01-08
    相关资源
    最近更新 更多