Node.js多函数导出报错:TypeError: getData is not a function
解决Node.js+Express多函数导出后调用报错问题
问题情况
在Node.js+Express项目中,demo_db.js通过module.exports导出getData和insertData两个数据库操作函数,单独导出单个函数时功能正常,但同时导出两个函数后,在app.js中调用时出现TypeError: getData is not a function错误。
错误原因
问题出在app.js的导入方式上:
const insertData = require("./demo_db"); const getData = require("./demo_db");
每次调用require("./demo_db")得到的是整个导出的对象(即{ getData, insertData }),而不是单个函数。此时getData和insertData都是这个对象,而非你期望的函数,调用对象自然会触发类型错误。
修复方案
有两种简单的修复方式:
方式1:解构导入(推荐)
直接在导入时解构出需要的函数:
const { getData, insertData } = require("./demo_db");
这样getData和insertData就直接对应demo_db.js里导出的两个函数,后续调用无需修改。
方式2:导入整个模块后访问属性
先导入整个模块对象,再通过对象访问对应的函数:
const db = require("./demo_db");
调用时改为:
// GET接口中 db.getData((err, result) => { /* ... */ }); // POST接口中 db.insertData(id, name, (err, insertedData) => { /* ... */ });
修正后的app.js完整代码
const express = require("express"); const app = express(); const fs = require("fs"); const { people } = require("./data2"); // 替换原来的两行导入为解构导入 const { getData, insertData } = require("./demo_db"); // static assets app.use(express.static("./methods-public")); // parse form data app.use(express.urlencoded({ extended: false })); app.use(express.json()); app.get("/api/people", (req, res) => { getData((err, result) => { if (err) { return res.status(500).json({ error: err }); } res.json({ data: result }); }); }); app.post("/api/people/add", (req, res) => { const { id, name } = req.body; insertData(id, name, (err, insertedData) => { if (err) { return res.status(500).json({ error: "Failed to insert data" }); } res.json({ message: "Data inserted successfully", data: insertedData }); }); }); app.listen(5000, () => { console.log("Server is listening on port 5000...."); });
内容的提问来源于stack exchange,提问作者user9699822
相关产品推荐
相关产品推荐

