Saya baru mengenal Nodejs dan bingung tentang ekspor. Saya telah membaca sejumlah pertanyaan SO dan berbagai posting blog, tetapi saya melewatkan sesuatu yang berhubungan dengan module.exports dan memerlukan pernyataan. Saya memiliki direktori server yang diatur seperti ini.

User/
|-- sqldb.js
|
|-- site1/
   |-- test.js
|
|-- site2/
   |-- foo.js
   |-- bar.js

Sqldb.js adalah modul yang mengelola kumpulan koneksi database mysql, yang memungkinkan situs anak mengakses database induk secara bersamaan.

--- sqldb.js ---

// ... code and stuff ... 

async function initDB(){
    console.log("Initializing database");
}

async function addPlayers(players) {
    console.log("Add Players: ", players);
}

module.exports = {
    initDB,
    addPlayers
}

Dalam test.js saya ingin require sqldb.js dari direktori induk sehingga saya dapat memanggil fungsi addPlayers.

--- test.js ---

const {sqldb} = require('../sqldb.js');

console.log("sqldb: ", sqldb);

var players = ['Bob', 'Samantha'];

sqldb.addPlayers(players);

Logging sqldb menunjukkan undefined dan kemudian memanggil addPlayers di atasnya memberikan kesalahan TypeError: Cannot read property 'addPlayers' of undefined yang diharapkan.

Adakah yang bisa menawarkan wawasan tentang cara memperbaikinya?

0
John Riggs 24 Maret 2020, 19:38

1 menjawab

Jawaban Terbaik

Menggunakan const {sqldb} = require('../sqldb.js'); menentukan impor bernama. Ini berfungsi jika sqldb.js Anda memiliki metode dengan nama sqldb.

Karena Anda memiliki ekspor default di sqldb.js, Anda harus menggunakan:

Ekspor Default:

Const sqldb = membutuhkan('../sqldb.js')

Dan untuk mengakses addPlayers - gunakan sqldb.addPlayers();

Ekspor Bernama:

Atau Anda juga dapat menggunakan ekspor bernama seperti:

Const {addPlayers,initDB} = membutuhkan('../sqldb.js');

Maka Anda bisa langsung memanggil addPlayers();

Semoga ini membantu!

2
Sankhavaram Saitulasiram 24 Maret 2020, 16:55