You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:06:06