如何从 Nodejs 的父目录中正确导出和要求?

How to properly export and require from parent directory in Nodejs?

我是 Nodejs 的新手,对导出感到困惑。我已经阅读了许多 SO 问题和各种博客文章,但我遗漏了与 module.exports 和 require 语句相关的内容。我有一个这样设置的服务器目录。

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

sqldb.js 是一个管理 mysql 数据库连接池的模块,允许子站点同时访问父数据库。

--- 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
}

在 test.js 中,我想从父目录 require sqldb.js 中调用 addPlayers 函数。

--- test.js ---

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

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

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

sqldb.addPlayers(players);

记录 sqldb 显示 undefined,然后对其调用 addPlayers 会给出预期的 TypeError: Cannot read property 'addPlayers' of undefined 错误。

任何人都可以提供一些关于如何解决此问题的见解吗?

使用 const {sqldb} = require('../sqldb.js');指定命名导入。如果您的 sqldb.js 有一个名为 sqldb.

的方法,则此方法有效

由于您在 sqldb.js 中有默认导出,您必须使用:

默认导出:

const sqldb = require('../sqldb.js')

并访问 addPlayers - 使用 sqldb.addPlayers();

命名导出:

或者您也可以使用命名导出,例如:

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

然后就可以直接调用addPlayers();

希望对您有所帮助!