0

0

如何正确导出与导入多个函数模块

聖光之護

聖光之護

发布时间:2026-01-22 14:56:01

|

306人浏览过

|

来源于php中文网

原创

如何正确导出与导入多个函数模块

本文详解 node.js 中使用 `module.exports` 导出多个函数时的常见错误(如 “typeerror: getdata is not a function”),并提供标准、可复用的解构导入方案及最佳实践。

在 Node.js 项目中,当通过 module.exports = { fn1, fn2 } 导出多个函数时,必须使用对象解构语法导入,否则会因引用方式不匹配导致运行时错误(如 getData is not a function)。这是初学者高频踩坑点——本质是 CommonJS 模块系统中 require() 返回的是整个导出对象,而非单个函数。

✅ 正确做法:解构导入(推荐)

修改 app.js 中的导入语句:

// ❌ 错误:分别 require 同一文件两次 → 每次返回完整对象,但被当作函数调用
// const insertData = require("./demo_db");
// const getData = require("./demo_db");

// ✅ 正确:一次 require + 解构获取所需函数
const { insertData, getData } = require("./demo_db");

这样 insertData 和 getData 就直接绑定为对应函数引用,可直接调用:

app.get("/api/people", (req, res) => {
  getData((err, result) => {
    if (err) return res.status(500).json({ error: err });
    res.json({ data: result });
  });
});

⚠️ 常见误区与注意事项

  • 不要混用导入风格:若 demo_db.js 使用 module.exports = { ... },则不可用 const db = require('./demo_db'); db.getData(...) 以外的方式跳过解构——除非你显式赋值(如 const db = require('./demo_db'); const getData = db.getData;),但解构更简洁清晰。
  • 避免重复 require:多次 require("./demo_db") 不会重复执行模块代码(Node.js 缓存机制保证单例),但语义上易引发误解,且无法直接获得函数引用。
  • 命名一致性:确保解构的键名与 module.exports 中的属性名完全一致(区分大小写),例如导出是 { getData },就不能解构为 { getDataFromDB }。
  • ES6 模块提示(可选升级):若项目已启用 ES modules("type": "module"),应改用 export { getData, insertData } 和 import { getData, insertData } from './demo_db.js',语法更统一,但需注意 .js 后缀和文件路径规范。

? 补充建议:增强模块健壮性

可在 demo_db.js 末尾添加简单验证,防止误用:

Python精要参考 pdf版
Python精要参考 pdf版

这本书给出了一份关于python这门优美语言的精要的参考。作者通过一个完整而清晰的入门指引将你带入python的乐园,随后在语法、类型和对象、运算符与表达式、控制流函数与函数编程、类及面向对象编程、模块和包、输入输出、执行环境等多方面给出了详尽的讲解。如果你想加入 python的世界,David M beazley的这本书可不要错过哦。 (封面是最新英文版的,中文版貌似只译到第二版)

下载
// 底部追加(非必需,但利于调试)
if (typeof module.exports.getData !== 'function' || typeof module.exports.insertData !== 'function') {
  console.warn('⚠️  demo_db export structure may be incorrect');
}

此外,数据库连接建议封装为单例或使用连接池(如 mysql2/promise + async/await),避免并发场景下的连接泄漏——但这属于进阶优化,当前问题核心在于模块导入方式。

总结:导出是对象 → 导入必解构。掌握这一原则,即可彻底规避 is not a function 类型错误,写出清晰、可维护的模块化 Node.js 代码。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

97

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

188

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

220

2025.12.24

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

466

2023.11.27

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

526

2023.09.20

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 805人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号