gpt4 book ai didi

node.js - 如何使用 ECMAScrip6 导入带参数的函数?

转载 作者:太空宇宙 更新时间:2023-11-04 00:11:23 25 4
gpt4 key购买 nike


我正在使用 Babel 和 ESLint 在 Express 中建立一个全新的项目,并尝试设置动态路由。唯一的问题是我不知道如何调用路线的加载程序。这是我当前关于加载程序的代码。

routes/index.js

import fs from 'fs';

/**
* Register Default Routes
* @param {Object} app express.Application
*/
export default function(app) {
fs.readdirSync(__dirname).forEach((fileName) => {
if (fileName == __filename.slice(__dirname.length + 1)) return;
let fileNameStripped = fileName.substring(0, fileName.lastIndexOf('.'));
require('./' + fileNameStripped)(app); // does not work
});
}

index.js

import express from 'express';
import routes from './routes/index.js';

const app = express();

app.use(express.static('public'));

routes(app); // works now

...

巴别塔错误

TypeError: require(...) is not a function
at /app/build/routes/index.js:1:314
at Array.forEach (<anonymous>)
at exports.default (/app/build/routes/index.js:1:195)
at Object.<anonymous> (/app/build/index.js:1:393)
at Module._compile (module.js:649:30)
at Object.Module._extensions..js (module.js:660:10)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:501:12)
at Function.Module._load (module.js:493:3)
at Function.Module.runMain (module.js:690:10)

该问题似乎与 https://github.com/babel/babel/issues/2683 有关

最佳答案

由于嵌套路由文件应该是具有 default 导出的 ES 模块,因此 require('./' + fileNameStripped) 是模块对象而不是函数。应该是:

require('./' + fileNameStripped).default(app);

根据 Babel 配置(dynamic-import-node 需要插件),require() 可以替换为动态 import(),但这里不太理想,因为动态 import 不是同步的,可能会导致竞争条件。

关于node.js - 如何使用 ECMAScrip6 导入带参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49363301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com