Node.js中如何在另一文件调用不同导出语法的函数?修复调用报错
问题解决:保留原有导出同时暴露
fun函数 问题根源
你在main.js里两次赋值module.exports,第二次的module.exports = {fun}直接覆盖了第一次导出的函数,这就导致call.js里要么只能拿到新对象,要么丢失原有导出逻辑。而你要求保留第一次的导出不能修改,所以不能用覆盖的方式。
解决方案
JS里函数是一等对象,可以直接给第一次导出的函数添加属性,把fun挂载到上面,而非重新赋值module.exports:
修改后的main.js代码
// 原有不可修改的导出,保持原样 module.exports = function(controller) { // some code }; // 你的fun函数定义 function fun() { // 函数逻辑 console.log('fun运行正常'); } // 把fun挂载到导出的函数对象上 module.exports.fun = fun;
call.js里的调用方式
const main = require('./main'); // 调用fun函数 main.fun(); // 如果需要调用原来的controller函数,直接调用main即可 // main(yourController);
原理说明
module.exports本质是一个对象,当你第一次赋值为函数后,这个函数本身也是一个对象,允许添加自定义属性。这样既保留了原有导出的controller函数,又能通过同一个require返回的对象访问到fun,不会出现覆盖导致的类型错误。
内容的提问来源于stack exchange,提问作者samsonmarandi
相关产品推荐
相关产品推荐

