javascript - 如何在 Nodejs 中正确从父目录导出和 require ?

标签 javascript node.js require module.exports

我是 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 显示未定义,然后对其调用addPlayers 会出现预期的TypeError:无法读取未定义的属性“addPlayers” 错误。

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

最佳答案

使用 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();

希望这有帮助!

关于javascript - 如何在 Nodejs 中正确从父目录导出和 require ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60835422/

相关文章:

javascript - 带有倾斜边框的现有 div 内的新 div

javascript - 进行ajax调用并在qtip中显示内容

javascript - 使用完全限定字符串设置 JSON 属性

javascript - 为什么 Promise 会捕获语法错误?

ruby - 使用参数与 ruby​​ require

node.js - 如何在 Node.js require() 中使用另一个模块中的一个模块功能

javascript - 学习 Chartjs .destroy()

node.js - 如何在不读取标准输入的情况下使用 `npm login` 设置 npm 凭据?

javascript - 正则表达式允许一个句子中的多个工作

node.js - 如何在 typescript 中导入双括号函数?