PERHATIAN
TLDS! (TERLALU PANJANG LAKUKAN SKIM)! Jawabannya panjang dan kaya! Anda bisa skim! Ini diformat dengan baik!
Jika Anda sedang terburu-buru !Anda dapat memeriksa Autentikasi bagian, Sequelize-typescript (bukan sekuel) bagian, Sequelize-typescript bagian.
Dan lebih baik Anda bisa langsung pergi ke NERAKA bagian! Kenali nodejs v14 NERAKA ! (Langsung ke akhir! Sedikit di atas).
Periksa juga PERBAIKI (Postgres v14 NERAKA)
Saya mulai dan sebelum mengetahui saya menemukan diri saya menulis terlalu banyak!
PANDUAN SUPER
Pada dasarnya sekuel tidak boleh hanya menggantung! Tapi buat kesalahan!
Melihat sumber kode
Dengan melihat sync
kode di sini
async sync(options) {
// ...
// no models defined, just authenticate
if (!models.length) {
await this.authenticate(options);
} else {
for (const model of models) await model.sync(options);
}
if (options.hooks) {
await this.runHooks('afterBulkSync', options);
}
return this;
}
Seseorang dapat dengan mudah melihat kemungkinan menggantung!
Log
Untuk men-debug anomali seperti itu, pertama-tama, penting untuk memiliki logging . yang baik !
Dan Anda dapat memeriksa cara menambahkan logging di sini! Meskipun sekuel biasanya memiliki logging kueri yang diaktifkan secara default!
https://sequelize.org/master/manual/getting-started.html #log
const sequelize = new Sequelize('sqlite::memory:', {
// Choose one of the logging options
logging: console.log, // Default, displays the first parameter of the log function call
logging: (...msg) => console.log(msg), // Displays all log function call parameters
logging: false, // Disables logging
logging: msg => logger.debug(msg), // Use custom logger (e.g. Winston or Bunyan), displays the first parameter
logging: logger.debug.bind(logger) // Alternative way to use custom logger, displays all messages
});
Periksa otentikasi
Jika tidak masuk terjadi! Itu mungkin berarti sekuel tidak apa-apa dan hanya menggantung di awal! Untuk menguji autentikasi dan apakah koneksi berfungsi!
Anda dapat menguji dengan otentikasi :
https://sequelize.org/master/manual/getting -started.html#testing-the-connection
try {
console.log('Gonna authenticate'); // <== to make sure console.log is working and not overrided!
await sequelize.authenticate();
console.log('Connection has been established successfully.');
} catch (error) {
console.error('Unable to connect to the database:', error);
}
Jika Anda tidak mendapatkan log! Dan Gonna authenticate
dicetak ok! Kemudian prosesnya tergantung pada otentikasi . Yang menunjukkan masalah dalam otentikasi!
Periksa kredensial Anda
Pastikan Anda tidak melakukan kesalahan!
Periksa konektivitas dari psql atau klien eksternal lainnya
- Jika tidak berhasil! Ini menyarankan masalah dengan server postgres! Atau beberapa konfigurasi!
- Jika berhasil! Maka masalahnya ada di nodejs! Dan program Anda!
JANGAN LUPA INSTAL DRIVER POSTGRES (Atau driver db anda)
Sesuai dokumen:https://sequelize.org/master/manual/ memulai.html#installing
# One of the following:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server
Salah satu perintah! Pastikan Anda tidak melupakannya!
Memahami apa yang terjadi dan men-debug lebih baik! (pencatatan sumber kode)
Cara terbaik untuk men-debug! Dan benar-benar menentukan di mana masalahnya terjadi! Adalah dengan menambahkan log ke kode sumber diri! Cara cepat bagi saya adalah langsung melakukannya di node_modules
. Saya membuka git di repo sekuel! Melakukan pencarian! Menentukan tempat sync
, authenticate
, query
! Semua berada di sequelize.js
! Anda dapat memeriksa di sini
! Seseorang dapat CTRL + F untuk mendapatkan metode > authenticate(
[tambahkan (
]. Bagaimanapun! Anda dapat melakukan hal yang sama di node_modules
! Dan mulai menambahkan log! Anda akan tahu di bagian mana masalahnya terjadi! Yang membantu Anda men-debug masalah!
Cara lainnya adalah dengan fork ! Dan gunakan garpumu! Dan bekerja lebih baik!
Tapi mmm! node_modules adalah cara yang cepat ! Anda dapat mengambil salinan ! juga! Untuk memastikan Anda tidak kehilangan log Anda! Setelah Anda memperbarui! Pada akhirnya bersih dengan hanya menghapus seluruh modul! Dan instal ulang! Atau cukup balikkan pembuatan log (batalkan)! Saya menemukan cara yang menarik untuk debugging!
Tapi seharusnya ada kesalahan
Biasanya harus! Dengan melihat sumber kode Anda bisa tahu lebih baik! Biasanya kesalahan harus dilemparkan! Tetapi jika suatu proses digantung! Dan tidak ada kesalahan yang dilemparkan! Maka Anda dapat mengharapkan hasil seperti ini! Di sini yang bisa menjadi driver hilang! Pastikan juga console.log
. Apakah bekerja dengan baik! Dan hal terakhir! MMM mungkin masalah dengan nodejs
sendiri (lihat bagian terakhir).
Saya menggunakan sekuel-typescript (bukan sekuel)
Sangat penting untuk diketahui! Sequelize-typescript hanyalah pembungkus sekuel! Itu ada untuk menambahkan dukungan TypeScript! Ini menyediakan dekorator dan beberapa fitur! Juga Dari sekuel v5! TypeScript didukung langsung dalam sekuel! Lihat di sinihttps://sequelize.org/master/manual/typescript.html sekuel-typescript dalam versi terbaru! Beralih untuk menggunakan juga jenis deklarasi asli sekuel!
Sebagai sekuel-typecript bungkus sekuel! Pastikan untuk memverifikasi dokumentasi sekuel!
Perlu diketahui juga ada beberapa orang yang berteriak :Jangan gunakan dekorator! mmm! mmm! Dan satu lagi!https://stackoverflow.com/a/60369189/7668448
Sequelize-typescript
Jika Anda menggunakan sequelize-typescript pastikan versi sequelize-typescript
dan sequelize
lakukan cocokkan ! Sesuai di sana doc V5
dari sekuel! Saya kira V6
juga harus dilakukan! Dan v1
untuk sekuel-typescript!
npm install [email protected] [email protected]
Dan jangan lupa paket yang dibutuhkan TypeScript sesuai yang ada doc!
https:// /www.npmjs.com/package/sequelize-typescript
(Anda dapat memeriksa dan memverifikasi semua informasi tersebut di dokumen itu sendiri)
Mengapa menggunakan sequelize-typescript ?
Seperti yang sudah disebutkan! Sequelize memiliki dukungan asli untuk TypeScript mulai dari V5
. Sesuai di sini
. Jadi mengapa menggunakan pembungkus di atasnya! Itu juga menggunakan dekorator! (Saya tidak menentang dekorator! Beberapa di antaranya! Sesuai di sini
)
Tanyakan pada diri sendiri mengapa? Apakah ada sesuatu untuk membuat sekuel-TypeScript! Nilai tambah penting dibandingkan dengan cara asli? Jika ada hal-hal yang jelas! Silakan sebutkan mereka di komentar! Dan saya akan memperbarui! Bagian ini!
Dan jika tidak! Asli bisa jauh lebih baik! Sebuah ketergantungan atau banyak dalam waktu kurang!
Konfigurasi proyek
tsconfig!
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"moduleResolution": "node",
"rootDir": "./src",
"outDir": "./dist",
"lib": [
"es2015",
"es2016",
"dom"
],
"declaration": true,
"experimentalDecorators": true,
"esModuleInterop": true
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules/**/*",
"src/**/*.test.tsx",
"src/**/*.story.tsx",
"test/**/*"
]
}
Itu dua hal penting yang harus ditambahkan.
"experimentalDecorators": true,
"esModuleInterop": true
Tapi itu seharusnya tidak menjadi masalah Anda! Jika tidak, proyek akan menimbulkan kesalahan kompilasi!
NERAKA
VERSI Node js (V14 NERAKA)
Dan ya! Itu bisa jadi penyebabnya! Anda mungkin sudah terbiasa bekerja dengan baik sebelumnya! Dan kemudian di komputer atau lingkungan baru! Tidak berfungsi lagi !
Versi simpul bisa menjadi masalah ! Simpul v15 dan Node v14 ! Itu masalah yang diketahui! Saya sendiri pernah bertemu dengan knex.js
dan postgres
(knex.js adalah pembuat kueri)! Jadi Anda dapat melihat bahwa itu terkait! Dalam cerita saya, kodenya berfungsi dengan baik di laptop saya dan vps lama yang kami gunakan! Tapi kemudian saya ditempatkan di windows rdp! Dan mmm! Ledakan! Kemudian saya menarik rambut saya untuk beberapa waktu! Saya merefleksikan dan memeriksa! Tidak ada perubahan! Dan kemudian saya datang ke hei! Saya hanya memperbarui nodejs! Dan kemudian saya menemukan bahwa orang lain mengalami hal yang sama! Pendeknya! Semuanya dimulai pada nodejs v14
(saya menyebutnya v14 NERAKA )! Anda dapat memeriksa jawaban saya tentang hal itu di sini
Dan ternyata masalah yang sama selalu ada dengan nodejs v15
!
Dalam pertanyaan dari thread ini! Kami mengkonfirmasi itu! Di desktop saya semua bekerja dengan baik! Nodejs v12
! Dan dengan komputer teman saya! Tidak! nodejs v14
dan nodejs v15
. Kemudian saya ingin mengkonfirmasi! Saya menginstal nodejs v15
Dan gerbong! BINGO! Eksekusi berhenti begitu saja tanpa diduga! Tidak ada pencatatan! Tidak ada kesalahan! Dalam v12
! Semua bekerja dengan benar! saya memiliki kesalahan pada awalnya kemudian saya memperbaikinya! Dan server sudah aktif dan berjalan! Dan sekuel terhubung ke DB!
Ini eksekusinya
V12 dan v13
Saya menampilkan v13! Hal yang sama terjadi dengan v12!
nvm use v13
Now using node v13.14.0 (npm v6.14.4)
[email protected] ~/Documents/coderhero/Dev/projects/Fahima-ecommerce LuckyLook npm run dev
> [email protected] dev /home/coderhero/Documents/coderhero/Dev/projects/Fahima-ecommerce
> npx ts-node-dev src/server.ts
[INFO] 01:49:29 ts-node-dev ver. 1.0.0 (using ts-node ver. 9.0.0, typescript ver. 4.0.5)
config ::::
{
username: 'fahima',
password: '123456',
database: 'fahimashop',
host: 'localhost',
dialect: 'postgres'
}
hi there ::::
Executing (default): SELECT 1+1 AS result
connection established
Executing (default): CREATE TABLE IF NOT EXISTS "Products" ("id" SERIAL , "brand" TEXT, "price" DECIMAL, "description" VARCHAR(255), "imgUrl" VARCHAR(255), "category" VARCHAR(255), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, PRIMARY KEY ("id"));
Executing (default): SELECT i.relname AS name, ix.indisprimary AS primary, ix.indisunique AS unique, ix.indkey AS indkey, array_agg(a.attnum) as column_indexes, array_agg(a.attname) AS column_names, pg_get_indexdef(ix.indexrelid) AS definition FROM pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND t.relkind = 'r' and t.relname = 'Products' GROUP BY i.relname, ix.indexrelid, ix.indisprimary, ix.indisunique, ix.indkey ORDER BY i.relname;
server running http://localhost:8100
press CTRL+C to stop server, please :)
Keren bekerja tidak ada masalah
Eksekusi V14 dan v15
v14
[email protected] ~/Documents/coderhero/Dev/projects/Fahima-ecommerce LuckyLook node -v
v14.15.0
[email protected] ~/Documents/coderhero/Dev/projects/Fahima-ecommerce LuckyLook npm run dev
> [email protected] dev /home/coderhero/Documents/coderhero/Dev/projects/Fahima-ecommerce
> npx ts-node-dev src/server.ts
[INFO] 02:07:35 ts-node-dev ver. 1.0.0 (using ts-node ver. 9.0.0, typescript ver. 4.0.5)
config ::::
{
username: 'fahima',
password: '123456',
database: 'fahimashop',
host: 'localhost',
dialect: 'postgres'
}
hi there ::::
[email protected] ~/Documents/coderhero/Dev/projects/Fahima-ecommerce LuckyLook
Dan opps! Program keluar secara tiba-tiba tanpa keluaran kesalahan!
V15
[email protected] ~/Documents/coderhero/Dev/projects/Fahima-ecommerce LuckyLook nvm use v15
Now using node v15.0.1 (npm v7.0.3)
[email protected] ~/Documents/coderhero/Dev/projects/Fahima-ecommerce LuckyLook npm run dev
> [email protected] dev
> npx ts-node-dev src/server.ts
[INFO] 02:10:48 ts-node-dev ver. 1.0.0 (using ts-node ver. 9.0.0, typescript ver. 4.0.5)
config ::::
{
username: 'fahima',
password: '123456',
database: 'fahimashop',
host: 'localhost',
dialect: 'postgres'
}
hi there ::::
[email protected] ~/Documents/coderhero/Dev/projects/Fahima-ecommerce LuckyLook
Dan oppsi lagi! Program keluar secara tiba-tiba tanpa keluaran kesalahan!
Tidak ada perbedaan juga antara v14
dan v15
! Ini V14 HELL
.
Singkatnya
V14 NERAKA adalah penyebab yang diketahui dan sangat mungkin! Ada masalah dengan pg
modul saya kira! Sesuatu berubah pada v14
dan menyebabkan masalah ini!
Singkatnya! Jika tidak ada yang masuk akal! Dan jika kode Anda yang sama berfungsi sebelumnya! Hal pertama yang harus dilakukan! Apakah untuk memeriksa dengan nodejs v13
atau v12
! Itu bisa menyelamatkan Anda dari kegilaan! Siapa yang akan mengatakan versi nodejs dan yang baru akan membuat masalah seperti itu!
Masalah apa ini! Apa itu V14 NERAKA di nodejs ?
Jika seperti saya, Anda ingin mengetahui detailnya dan apa yang terjadi!?
Dengan simpul V14! Beberapa perubahan besar terjadi pada api! Juga banyak hal yang berubah! Termasuk versi Openssl!
Untuk postgres! Dan pg
modul! Masalahnya seperti yang dijelaskan dalam komentar
ini per utas
ini :
Dan sesuai PR ini !
Anda dapat melihat perubahannya di perbedaan ini
Singkatnya sebagaimana dimaksud! Perilaku untuk onReadySate
diubah untuk net.Socket
!Dan solusi yang diterapkan adalah tidak menggunakan onReadyState
sama sekali!
Dan sesuai ini
Periksa baris ini
Dalam versi yang lebih lama, koneksi dipanggil hanya jika soket dalam keadaan closed
negara! readyState
penggunaan dihilangkan!
Anda bisa mengerti! Tergantung implementasinya! Banyak hal yang mungkin terpengaruh atau tidak oleh perubahan inti tersebut!
Perubahan simpul yang relevan
Dan karena saya ingin melihat di mana perubahan itu terjadi! Ini dia dan dapat memeriksa
https://github.com/nodejs/node/pull/32272
Seseorang dapat memeriksa log perubahan juga:
https://github.com/nodejs/node/blob /master/doc/changelogs/CHANGELOG_V14.md
PERBAIKI (Postgres v14 NERAKA)
Sesuai jawaban saya di sini .
Tingkatkan pg
driver ke >=8.0.3
! Anda cukup mengupgrade ke yang terbaru!
npm install [email protected] --save
Dan Anda dapat memeriksa masalah kami yang dimaksud
Versi lama di v7
Memperbarui ke v8
Berjalan lagi dengan node v15
Taraaaa! Dan itu berhasil dengan luar biasa!
Dan jika Anda tidak menggunakan postgres
! Dan masalahnya adalah v14 HELL
! Artinya Anda menguji dengan v13
. Dan itu berhasil! Kemudian coba perbarui driver db Anda ke yang terbaru!
Mengapa simpul v14 + keluar dan tidak ada kesalahan pencatatan
Juga untuk menyebutkan perubahan yang melanggar! Dibuat pg
buat proses keluar di connect() call
. Dan itulah yang membuatnya keluar! Dan logging harus dilihat! Lebih detail untuk ini! Berikut bagaimana hal itu terjadi! Sekuel memiliki implementasi dialek postgres! Yang menggunakan hal! Dan pg klien! buat koneksi! Koneksi memiliki connect
peristiwa! Saat terhubung, pancarkan! Dan karena node v14 mengubah perilaku untuk memulai dengan open! Koneksi aliran dilewati! Dan aliran dianggap terhubung! Dimana tidak! Dan connect
acara dipancarkan secara langsung! Ketika itu terjadi! Klien akan memanggil requestSsl()
atau startup()
metode objek koneksi! Dan keduanya akan memanggil this._stream.write
. karena aliran tidak terhubung! Terjadi kesalahan! Kesalahan ini tidak menangkap! Kemudian janji di sekuel driver! Akan tetap tidak terselesaikan! Dan kemudian loop acara menjadi kosong! Nodejs dengan perilaku default baru saja keluar!
Anda dapat melihat langkah melalui baris kode:
- adaptor Sekuelisasi panggil pg client untuk membuat koneksi dan janji
- pg panggilan klien terhubung pada objek koneksi
- koneksi pg
connect()
panggil dan pancarkanconnect
! Mengira aliran terhubung karena perubahan V14 - klien pg
connect
acara ditangkap dan panggilan balik dijalankan!requestSsl()
ataustartup()
akan dijalankan - Salah satu metode jalankan dan
stream.write
akan dipanggil (requestSsl() , startup() ) - Kesalahan Streaming (tidak ditangkap)
- Janji> dalam sekuel adaptor postgres! Masih belum terselesaikan!
- loop acara kosong => Nodejs => Keluar
Mengapa nodejs keluar (janji yang belum terselesaikan)
https://github.com/nodejs/node/issues/22088
Node keluar tanpa kesalahan dan tidak menunggu janji (Panggilan balik acara)
apa yang terjadi jika Janji tidak pernah diselesaikan?
NVM
Jika Anda tidak tahu apa nvm
adalah! Atau Anda tidak menggunakan nvm
. Pertimbangkan untuk menggunakannya! Karena ini adalah alat yang sangat menarik! Nvm adalah alat manajemen versi simpul !
Dengan perubahan nvm, debugging, dan pengujian ke dan dengan versi nodejs yang berbeda! Cepat dan mudah! Jadi, instal versi baru nodejs secara paralel!
Catatan tentang sequelize.sync()
Jangan gunakan untuk production
! Atau sama sekali! (Sebagian besar ORM! Dan pembuat kueri (knex.js) menggunakan migrasi).
https://sequelize.org/master/manual/model -basics.html#synchronization-in-production
Dari dokumen