programing

MySQL 쿼리에서 결과를 반환하는 Node.js

muds 2023. 10. 8. 10:23
반응형

MySQL 쿼리에서 결과를 반환하는 Node.js

데이터베이스에서 헥스코드를 가져오는 다음과 같은 기능이 있습니다.

function getColour(username, roomCount)
{
    connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result)
    {
        if (err) throw err;
        return result[0].hexcode;
    });
}

문제는 콜백 기능에서 결과를 반환하는데 getColour 기능에서 아무것도 반환되지 않는다는 것입니다.getColour 함수가 다음 값을 반환하기를 원합니다.result[0].hexcode.

getColour에 전화를 걸었을 때 아무 것도 돌려주지 않습니다.

저는 이런 걸 해봤어요.

function getColour(username, roomCount)
{
    var colour = '';
    connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result)
    {
        if (err) throw err;
        colour = result[0].hexcode;
    });
    return colour;
}

물론 SELECT 쿼리는 값을 반환할 때까지 완료되었습니다.colour

콜백에 대해서만 db 쿼리 결과에 대한 처리를 수행해야 합니다.같은.

function getColour(username, roomCount, callback)
{
    connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result)
    {
        if (err) 
            callback(err,null);
        else
            callback(null,result[0].hexcode);

    });

}

//call Fn for db query with callback
getColour("yourname",4, function(err,data){
        if (err) {
            // error handling code goes here
            console.log("ERROR : ",err);            
        } else {            
            // code to execute on data retrieval
            console.log("result from db is : ",data);   
        }    

});

이른바 '콜백 지옥'을 피하기 위해 약속을 이용하고자 한다면 다양한 접근법이 있습니다.

다음은 네이티브 약속과 표준 MySQL 패키지를 사용한 예입니다.

const mysql = require("mysql");

//left here for testing purposes, although there is only one colour in DB
const connection = mysql.createConnection({
  host: "remotemysql.com",
  user: "aKlLAqAfXH",
  password: "PZKuFVGRQD",
  database: "aKlLAqAfXH"
});

(async () => {
  connection.connect();
  const result = await getColour("username", 2);
  console.log(result);
  connection.end();
})();

function getColour(username, roomCount) {
  return new Promise((resolve, reject) => {
    connection.query(
      "SELECT hexcode FROM colours WHERE precedence = ?",
      [roomCount],
      (err, result) => {
        return err ? reject(err) : resolve(result[0].hexcode);
      }
    );
  });
}

비동기 기능에서는 약속이 해결되거나 거부될 때까지 기능 실행을 일시 중지하는 대기 표현식을 사용할 수 있습니다.이런 식으로.getColour함수는 결과가 반환되거나 쿼리 오류가 발생할 때까지 주 함수 실행을 일시 중지하는 MySQL 쿼리와의 약속을 반환합니다.

유사하지만 더 유연한 접근 방식은 MySQL 라이브러리의 약속 래퍼 패키지 또는 심지어 약속 기반 ORM을 사용하는 것일 수 있습니다.

언급URL : https://stackoverflow.com/questions/18361930/node-js-returning-result-from-mysql-query

반응형