• 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
106 wizyt
pytanie zadane 3 września w JavaScript, jQuery, AJAX przez Whereismycode Obywatel (1,350 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 przez BT101 Stary wyjadacz (10,950 p.)
wybrane 4 września 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 przez Whereismycode Obywatel (1,350 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 przez BT101 Stary wyjadacz (10,950 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 przez Whereismycode Obywatel (1,350 p.)
Właśnie doszedłem do tego. Dzięki za pomoc.
komentarz 6 września przez Whereismycode Obywatel (1,350 p.)
Czy za każdym razem powinienem zamykać połączenie?
1
komentarz 6 września przez BT101 Stary wyjadacz (10,950 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ź 61 wizyt
pytanie zadane 21 sierpnia w JavaScript, jQuery, AJAX przez mknnn221 Początkujący (350 p.)
0 głosów
2 odpowiedzi 123 wizyt
0 głosów
0 odpowiedzi 58 wizyt
pytanie zadane 20 stycznia w JavaScript, jQuery, AJAX przez revizor451 Obywatel (1,930 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

67,210 zapytań

114,168 odpowiedzi

241,977 komentarzy

45,879 pasjonatów

Przeglądających: 325
Pasjonatów: 6 Gości: 319

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...