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:
.env'den gelen verileri console.log şeklinde çağırır mısınız? Büyük ihtimal çekilen verilerde sıkıntı vardır. Onun için debug etmemiz lazım.

Ayrıca const DB_HOST = process.env.DB_HOST yerine const HOST = process.env.DB_HOST şeklinde bir kullanım daha sağlıklı olacaktır. Object key'leriyle değişkenlerin aynı isme sahip olması sıkıntı yaratabiliyor, kendi kodlarımdan biliyorum.
 
.env'den gelen verileri console.log şeklinde çağırır mısınız? Büyük ihtimal çekilen verilerde sıkıntı vardır. Onun için debug etmemiz lazım.

Ayrıca const DB_HOST = process.env.DB_HOST yerine const HOST = process.env.DB_HOST şeklinde bir kullanım daha sağlıklı olacaktır. Object key'leriyle değişkenlerin aynı isme sahip olması sıkıntı yaratabiliyor, kendi kodlarımdan biliyorum.

Dediklerinizi yaptım, fakat Undefined olarak çıkıyor hocam.

Belki düzelir diye dotenv'yi de bu iki şekille tekrar yüklemeye çalıştım.

Kod:
npm install dotenv
npm i nodemon dotenv --save-dev

Ek olarak .env çağırdığım değişkenleri ve dotenv'yi silip, direkt olarak obje'nin içindekilere process.env vermeye çalıştım, fakat hala aynı hatayı aldım yine.
 
Son düzenleme:
Env olmadan kullandığın şekilde port 3306 olarak set edilmiş. Ama env da ise 3606 olarak. Port dan dolayı hata veriyor olabilir. Env da sorun yok gibi. Dotenv kullanımı bu şekilde oluyor.
Env dosya adından da sorun olabilir.
Dosya adı .env olmalı veya içermeli.
 
Env olmadan kullandığın şekilde port 3306 olarak set edilmiş. Ama env da ise 3606 olarak. Port dan dolayı hata veriyor olabilir. Env da sorun yok gibi. Dotenv kullanımı bu şekilde oluyor.
Env dosya adından da sorun olabilir.
Dosya adı .env olmalı veya içermeli.

Portu .env'ye yanlış girmişim saolun düzelttim hocam, fakat yine aynı hatayı alıyorum, dosya adı dbInfo ve uzantısı .env, araştırırken bu sorunu yaşayan başklarını da gördüm, fakat onlara da bu sorunu çözen bir cevap gelmemiş sanırım.


 
Dediklerinizi yaptım, fakat Undefined olarak çıkıyor hocam.

Belki düzelir diye dotenv'yi de bu iki şekille tekrar yüklemeye çalıştım.

Kod:
npm install dotenv
npm i nodemon dotenv --save-dev

Ek olarak .env çağırdığım değişkenleri ve dotenv'yi silip, direkt olarak obje'nin içindekilere process.env vermeye çalıştım, fakat hala aynı hatayı alıyorum.
undefined olarak çıkıyorsa .env'den gelen verilerde sıkıntı var. Dosyayı .env şeklinde başka uzantı olmadan oluşturmalısınız buna dikkat edin.
require('dotenv').config({path: './.env'}); şeklinde de path belirtebilirsiniz belki onu hatalı yapmışsınızdır, şimdilik aklıma gelenler bunlar.
 
undefined olarak çıkıyorsa .env'den gelen verilerde sıkıntı var. Dosyayı .env şeklinde başka uzantı olmadan oluşturmalısınız buna dikkat edin.
require('dotenv').config({path: './.env'}); şeklinde de path belirtebilirsiniz belki onu hatalı yapmışsınızdır, şimdilik aklıma gelenler bunlar.

Malesef aynı hocam. Saolun yine de.
 
Son düzenleme:
Portu .env'ye yanlış girmişim saolun düzelttim hocam, fakat yine aynı hatayı alıyorum, dosya adı dbInfo ve uzantısı .env, araştırırken bu sorunu yaşayan başklarını da gördüm, fakat onlara da bu sorunu çözen bir cevap gelmemiş sanırım.
Nodemon kullanıyorsan kullanmadan başlatabilir misin? Ayrıca çalıştığın editoru kapatıp açmak da çözebilir. VsCode da importlar bazen kafayı yiyor.
Ayrıca sadece .env olarak oluştur ve dotenv da path falan belirtmeden dener misin?
 
Nodemon kullanıyorsan kullanmadan başlatabilir misin? Ayrıca çalıştığın editoru kapatıp açmak da çözebilir. VsCode da importlar bazen kafayı yiyor.
Ayrıca sadece .env olarak oluştur ve dotenv da path falan belirtmeden dener misin?

Nodemon'sızda denedim, fakat malesef yine aynı hocam.

enverr.png


enverr2.png
 
Son düzenleme:

Geri
Yukarı