javascript - 如何动态地 module.export 文件夹中的所有文件?

标签 javascript node.js express node-modules

我正在尝试动态导出模块。我已经很接近了,但不知道如何修复我的语法。

硬编码:

// index.js inside folder 'models'
const { User } = require('./User');
const { Token } = require('./Token');
const { Session } = require('./Session');

module.exports = {
    User,
    Token,
    Session,
};

动态编码(不起作用):

// index.js inside folder 'models'
const fs = require('fs');
const path = require('path');

module.exports = () => {
    fs.readdirSync(__dirname).forEach((file) => {
        if (file === 'index.js') return false;
        const fullName = path.join(__dirname, file);
        
        if (file.toLowerCase().indexOf('.js')) {
            // I think this somehow needs to be destructured like 
            // `return {require(fullName)}` or 
            // `require(fullName)[fullName]` I think
            require(fullName);
        }
    });
};

在代码的其他地方,我根据文件夹名称对其进行初始化:

// server.js
require('./models')();

最佳答案

您的动态导出将不起作用,因为您没有向导出函数返回任何内容。

尝试将此代码作为动态模型导出文件

// index.js inside folder 'models'
const fs = require('fs')
const path = require('path')

const models = {}

fs.readdirSync(__dirname)
  .filter(file => file !== 'index.js')
  .forEach(file => {
    const fullName = path.join(__dirname, file)

    if (file.toLowerCase().endsWith('.js')) {
      // Removes '.js' from the property name in 'models' object
      const [filename] = file.split('.')
      models[filename] = require(fullName)[filename]
    }
  })

module.exports = models

此方法不再导出函数,因此您在 server.js 中的要求现在应该如下所示

// server.js
require('./models');

关于javascript - 如何动态地 module.export 文件夹中的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67663836/

相关文章:

CSS 文件被阻止 : MIME type mismatch (X-Content-Type-Options: nosniff)

javascript - 如何在 Angular ivh TreeView 中获取选定节点的列表?

javascript - 构建流畅的马赛克网格

javascript - 如何根据索引获取由两个新行分隔的字符串?

node.js - 使用带有 ionic 和express 的卫星器

node.js - 如何使用socket.io向指定客户端发送数据?与 Angular、NodeJs、Express

javascript - 部署 react 应用程序

node.js - 基于Firebase功能的云通用 Angular 超时

node.js - Node js - 快速发送 pdf 作为响应下载

Javascript 和 Mongoose for 循环在执行内部 .find 之前完成