Node.js env ile veritabanına bağlanmıyor

00PARZIVAL00

Picopat
Katılım
23 Temmuz 2022
Mesajlar
519
Çözümler
1
Daha fazla  
Cinsiyet
Diğer
Selam, MySQL veritabanını, NodeJS ile bağlamaya çalışıyorum, normal yazdığımda bağlanıyor, fakat .env dosyası ile denediğimde bağlanmıyor, internete baktım biraz ama çözemedim. Yardım eder misiniz?

Env dosyası kullanmadan sorunsuz bağlanan şekil;

JavaScript:
const express = require('express');
const app = express();

const mysql = require('mysql');

const db = mysql.createPool({
    connectionLimit: 100,
    host: "127.0.0.1",
    user: "newuser",
    password: "password123",
    database: "userDB",
    port: "3306"
})

db.getConnection( (err, connection) => {

    if (err) throw (err)
    console.log("DB connected succesful:" + connection.threadId)

})

Env Dosyası ile hata aldığım şekil;
Kod:
DB_HOST = 127.0.0.1
DB_USER = newuser
DB_PASSWORD = password123
DB_DATABASE = userDB
DB_PORT = 3606

PORT = 3000

JavaScript:
const express = require('express');
const app = express();

const mysql = require('mysql');

require('dotenv').config()

const DB_HOST = process.env.DB_HOST
const DB_USER = process.env.DB_USER
const DB_PASSWORD = process.env.DB_PASSWORD
const DB_DATABASE = process.env.DB_DATABASE
const DB_PORT = process.env.DB_PORT

const db = mysql.createPool({
    connectionLimit: 100,
    host: DB_HOST,
    user: DB_USER,
    password: DB_PASSWORD,
    database: DB_DATABASE,
    port: DB_PORT
})

db.getConnection( (err, connection) => {

    if (err) throw (err)
    console.log("DB connected succesful:" + connection.threadId)

})

Not: Dotenv'nin config kısmına path vererek yapmayı denedim o da olmadı. Hepsi aynı klasörde.

Hata;
Kod:
C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\protocol\Parser.js:437

      throw err; // Rethrow non-MySQL errors

      ^



Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

    at Handshake.Sequence._packetToError (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)

    at Handshake.ErrorPacket (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18)

    at Protocol._parsePacket (C:\Users\trfur\Desktop\dbServer\node_modules\mysql\lib\protocol\Protocol.js:291:23)

    at Parser._parsePacket (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\protocol\Parser.js:433:10)

    at Parser.write (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\protocol\Parser.js:43:10)

    at Protocol.write (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\protocol\Protocol.js:38:16)

    at Socket.<anonymous> (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\Connection.js:88:28)

    at Socket.<anonymous> (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\Connection.js:526:10)

    at Socket.emit (node:events:527:28)

    at addChunk (node:internal/streams/readable:315:12)

    --------------------

    at Protocol._enqueue (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\protocol\Protocol.js:144:48)

    at Protocol.handshake (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\protocol\Protocol.js:51:23)

    at PoolConnection.connect (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\Connection.js:116:18)

    at Pool.getConnection (C:\Users\root\Desktop\dbServer\node_modules\mysql\lib\Pool.js:48:16)

    at Object.<anonymous> (C:\Users\root\Desktop\dbServer\dbServer.js:23:4)

    at Module._compile (node:internal/modules/cjs/loader:1105:14)

    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)

    at Module.load (node:internal/modules/cjs/loader:981:32)

    at Function.Module._load (node:internal/modules/cjs/loader:822:12)

    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) {

  code: 'ER_NOT_SUPPORTED_AUTH_MODE',

  errno: 1251,

  sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',

  sqlState: '08004',

  fatal: true

}

[nodemon] app crashed - waiting for file changes before starting...
 
Son düzenleme:
MySQL şifrenizi resetleyemeyi deneyin.


Bunu ilk başlarda denedim zaten, şimdi yine denedim, fakat yine aynı. Sorunun bunda olduğunu sanmıyorum, çünkü .env kullanmadan bağlanıyor, fakat .env ile bağlanmıyor ve .env değişkeni console.log da undefined olarak çıkıyor.
 
Bunu ilk başlarda denedim zaten, şimdi yine denedim, fakat yine aynı. Sorunun bunda olduğunu sanmıyorum, çünkü .env kullanmadan bağlanıyor, fakat .env ile bağlanmıyor ve .env değişkeni console.log da undefined olarak çıkıyor.
Diğer arkadaşın dediği gibi dosya ismini sadece .env vererek deneyin. dbInfo vercekseniz de path'i ona göre verin.
 
Saçma gelecek ama dbInfo yerine direk .env yapıp denermisin.
Diğer arkadaşın dediği gibi dosya ismini sadece .env vererek deneyin. dbInfo vercekseniz de path'i ona göre verin.

Aynı hocam.

Bu arada bir şey fark ettim, path verince hata mesajı şu şekilde değişiyor. Ve bir şey değiştirir mi bilmiyorum, ama .env içine yazılanlara tema geldi, önce sadece gri renk idi, şimdi normal kodlarda ki gibi renkli oldu.

Kod:
node:events:505
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3306
    at Server.setupListenHandle [as _listen2] (node:net:1372:16)
    at listenInCluster (node:net:1420:12)
    at Server.listen (node:net:1508:7)
    at Function.listen (C:\Users\root\Desktop\dbServer\node_modules\express\lib\application.js:635:24)
    at Object.<anonymous> (C:\Users\root\Desktop\dbServer\dbServer.js:32:5)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (node:net:1399:8)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  code: 'EADDRINUSE',
  errno: -4091,
  syscall: 'listen',
  address: '::',
  port: 3306
}
 
Aynı hocam.

Bu arada bir şey fark ettim, path verince hata mesajı şu şekilde değişiyor. Ve bir şey değiştirir mi bilmiyorum, ama .env içine yazılanlara tema geldi, önce sadece gri renk idi, şimdi normal kodlarda ki gibi renkli oldu.

Kod:
node:events:505
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3306
    at Server.setupListenHandle [as _listen2] (node:net:1372:16)
    at listenInCluster (node:net:1420:12)
    at Server.listen (node:net:1508:7)
    at Function.listen (C:\Users\root\Desktop\dbServer\node_modules\express\lib\application.js:635:24)
    at Object.<anonymous> (C:\Users\root\Desktop\dbServer\dbServer.js:32:5)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (node:net:1399:8)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  code: 'EADDRINUSE',
  errno: -4091,
  syscall: 'listen',
  address: '::',
  port: 3306
}
Burada dediğine göre port kullanılıyor

EADDRINUSE: address already in use :::3306

servere res atın birde öyle deneyin.
 
Burada dediğine göre port kullanılıyor

EADDRINUSE: address already in use :::3306

servere res atın birde öyle deneyin.

MySQL'e zaten bağlanabildim hocam, fakat env kullanmadan. Asıl sorun sanırsam .env kullanmaya çalışırken .env de oluşturulan değişkenlerin undefined çıkması. Fakat bir türlü çözümünü bulamadım.

@zeNnG, dediğinizi denedim bu arada hocam.

@oynozan, @zeNnG, @RaSGooL, @Kxaan şimdi denerken fark ettim, path'i verince .env dosyası okunuyor console.log'da falan, fakat şimdi de bu hatayı veriyor.

Kod:
node:events:505
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3306
    at Server.setupListenHandle [as _listen2] (node:net:1372:16)
    at listenInCluster (node:net:1420:12)
    at Server.listen (node:net:1508:7)
    at Function.listen (C:\Users\root\Desktop\dbServer\node_modules\express\lib\application.js:635:24)
    at Object.<anonymous> (C:\Users\root\Desktop\dbServer\dbServer.js:32:5)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (node:net:1399:8)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  code: 'EADDRINUSE',
  errno: -4091,
  syscall: 'listen',
  address: '::',
  port: 3306
}
[nodemon] app crashed - waiting for file changes before starting...
 
Son düzenleme:
MySQL'e zaten bağlanabildim hocam, fakat env kullanmadan. Asıl sorun sanırsam .env kullanmaya çalışırken .env de oluşturulan değişkenlerin undefined çıkması. Fakat bir türlü çözümünü bulamadım.

@zeNnG, dediğinizi denedim bu arada hocam.

@oynozan, @zeNnG, @RaSGooL, @Kxaan şimdi denerken fark ettim, path'i verince .env dosyası okunuyor console.log'da falan, fakat şimdi de bu hatayı veriyor.

Kod:
node:events:505
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3306
    at Server.setupListenHandle [as _listen2] (node:net:1372:16)
    at listenInCluster (node:net:1420:12)
    at Server.listen (node:net:1508:7)
    at Function.listen (C:\Users\root\Desktop\dbServer\node_modules\express\lib\application.js:635:24)
    at Object.<anonymous> (C:\Users\root\Desktop\dbServer\dbServer.js:32:5)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (node:net:1399:8)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  code: 'EADDRINUSE',
  errno: -4091,
  syscall: 'listen',
  address: '::',
  port: 3306
}
[nodemon] app crashed - waiting for file changes before starting...
@zeNnG hocamın dediği gibi PORT zaten kullanımda şuan. Linux sunucunuz varsa kill $(lsof -t -i:3306) komutu 3306 Portunda çalışan tüm process'leri devre dışı bırakacaktır.
 
MySQL'e zaten bağlanabildim hocam, fakat env kullanmadan. Asıl sorun sanırsam .env kullanmaya çalışırken .env de oluşturulan değişkenlerin undefined çıkması. Fakat bir türlü çözümünü bulamadım.

@zeNnG, dediğinizi denedim bu arada hocam.

@oynozan, @zeNnG, @RaSGooL, @Kxaan şimdi denerken fark ettim, path'i verince .env dosyası okunuyor console.log'da falan, fakat şimdi de bu hatayı veriyor.

Kod:
node:events:505
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3306
    at Server.setupListenHandle [as _listen2] (node:net:1372:16)
    at listenInCluster (node:net:1420:12)
    at Server.listen (node:net:1508:7)
    at Function.listen (C:\Users\root\Desktop\dbServer\node_modules\express\lib\application.js:635:24)
    at Object.<anonymous> (C:\Users\root\Desktop\dbServer\dbServer.js:32:5)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (node:net:1399:8)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  code: 'EADDRINUSE',
  errno: -4091,
  syscall: 'listen',
  address: '::',
  port: 3306
}
[nodemon] app crashed - waiting for file changes before starting...

Linux sunucum yok ve Windows kullanıyorum, hala araştırıyorum aktif olarak ama bulamadım henüz, "npx kill-port 3306" diye bir şey buldum ve denedim fakat işe yaramadı, sizce başka neden kaynaklanıyor olabilir? Yani portu nasıl kapatabilirim veya kullanan şeyi bulabilir miyim?

@oynozan, @zeNnG, @RaSGooL, @Kxaan evet şu anda sorunu çözmüş bulunmaktayım ve sorunun nedenini hala anlayamadım, ilk olarak 3000 portunu silip denedim ve olmadı gibi bir şey oldu, daha sonra bir şeyler denedim ve oldu, ardından eski haline getirdim kodu ve tekrar çalıştı, PC'ye reset falanda atmadım, aklıma @RaSGooL'un dediği gibi VSCode'un kafayı yemesi geliyor en yüksek ihtimallerden şu an.

Çalışan kod.

vsc.png


vsc2.png


Port'a this vermemin sebebi neden bilmiyorum, birden port undefined demeye başladı ve bunu verince çözüldü.

Hepinize ilginizden dolayı teşekkür ederim.

Düzenleme: port kısmında "const port = process.env.PORT" değişkenini yanlışlıkla kaldırmışım ve diğer "DB_PORT" ile karıştırmışım.

Bu yüzden objenin içindeki "DB_PORT" değişkenini göremediği için this. istemiş.
 
Son düzenleme:

Geri
Yukarı