• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[NODE.JS] Zapytanie do bazy nie działa każdorazowo

0 głosów
528 wizyt
pytanie zadane 3 września 2019 w JavaScript przez Whereismycode Obywatel (1,710 p.)

Witam. W mojej app'ce wykorzystuje funkcje do pobierania aktualnych wartości dla konkretnego użytkownika. Funkcje którą wykorzystuje wygląda następująco:

function getAccountInfoSQL(identifier, callback){
	pool.query("SELECT * from users WHERE userID = " + pool.escape(identifier), function(err, row) {
		if (err){
			//TODO: ERR mess
			return;
		}
		callback(row[0]);
	});
}

Oczywiście to działa, ale nie pobiera aktualnej wartości która została zaktualizowana

Instrukcja warunkowa 

//if(...){
//nowa wartość
pool.query('UPDATE `users` SET `name` =  '+newname+' WHERE `userID` = '+ID);
//pobranie nowej wartości
getAccountInfoSQL(ID, function(account){
		console.log(account.name)
});                                                                                          

Być może ktoś z obecnych widzi jaki błąd popełniłem.

1 odpowiedź

+2 głosów
odpowiedź 3 września 2019 przez BT101 Stary wyjadacz (12,540 p.)
wybrane 4 września 2019 przez Whereismycode
 
Najlepsza

Nie wiem jakiej libki używasz ale na 99% ignorujesz promise, który jest zreturnowany z pool.query na co wskazuje to

Oczywiście to działa, ale nie pobiera aktualnej wartości która została zaktualizowana

Tutaj

pool.query('UPDATE `users` SET `name` =  '+newname+' WHERE `userID` = '+ID);
//pobranie nowej wartości
getAccountInfoSQL(ID, function(account){
        console.log(account.name)
});                                     

prawdopodobnie pool.query zwraca promise, którego nie obsługujesz i funkcja getAccountInfoSQL jest defacto wywołana zanim pool.query skończy swoje zadanie stąd wynika problem.

Spróbuj tak

pool.query('UPDATE `users` SET `name` =  '+newname+' WHERE `userID` = '+ID)
    .then(() => {
        getAccountInfoSQL(ID, function (account) {
            console.log(account.name)
        });
    });

 

komentarz 4 września 2019 przez Whereismycode Obywatel (1,710 p.)

Wyrzuca mi w konsoli 

pool.query(...).then is not a function

A do łącznia z bazą danych używam standardowej libki (mysql)

Link do libki:

https://www.npmjs.com/package/mysql

 

2
komentarz 4 września 2019 przez BT101 Stary wyjadacz (12,540 p.)

No to masz dokumentacje... Nie zwraca promise tylko trzeba callback funkcje przekazać:

const sql = 'UPDATE `users` SET `name` =  '+newname+' WHERE `userID` = '+ID;
pool.query(sql, (error) => {
        if (error) throw error;
        getAccountInfoSQL(ID, function (account) {
            console.log(account.name)
        });
})

 

komentarz 4 września 2019 przez Whereismycode Obywatel (1,710 p.)
Właśnie doszedłem do tego. Dzięki za pomoc.
komentarz 6 września 2019 przez Whereismycode Obywatel (1,710 p.)
Czy za każdym razem powinienem zamykać połączenie?
1
komentarz 6 września 2019 przez BT101 Stary wyjadacz (12,540 p.)

Depends on what are your needs.

Creating a connection takes some time, so if you need to access database frequently it's better to keep the connection open.

Jest taka apka, w której można na tego typu pytania szybko znaleźć odpowiedź - google.com, polecam

Podobne pytania

0 głosów
1 odpowiedź 788 wizyt
0 głosów
2 odpowiedzi 754 wizyt
pytanie zadane 27 lipca 2020 w JavaScript przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 353 wizyt
pytanie zadane 18 października 2020 w JavaScript przez dkrakowski Nowicjusz (140 p.)

93,757 zapytań

142,716 odpowiedzi

323,363 komentarzy

63,353 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...