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

TypeScript连接MongoDB时遇“Promise<void>不可调用”错误求助

解决TypeScript中"This expression is not callable. Type 'Promise' has no call signatures"错误

错误原因

你在data.ts中直接执行了MongoClient.connect(),并将其返回的Promise对象赋值给了mongoDBConnection。而在app.ts中你试图把它当作函数调用(mongoDBConnection();),但Promise本身不是可调用的函数,因此触发了类型错误。

修复方案

方案1:将mongoDBConnection改为可调用函数(推荐)

修改data.ts,把连接逻辑封装成async函数,这样就能在app.ts中正常调用:

import { MongoClient } from "mongodb";
import dotenv from "dotenv";

dotenv.config();

export async function mongoDBConnection() {
  try {
    const client = await MongoClient.connect(process.env.MONGODB_URL as string);
    const database = client.db();
    const collection = database.collection("todos");
    const dataFromMongo = await collection.find().toArray();
    console.log(dataFromMongo);
  } catch (error) {
    console.error("MongoDB connection error:", error);
  }
}

此时app.ts中的mongoDBConnection();调用就完全正常了。如果需要等待连接完成后再启动服务,可以改成:

// app.ts
async function startApp() {
  await mongoDBConnection();
  app.listen(8000, () => {
    console.log("App is running at port 8000");
  });
}

startApp();

方案2:直接使用已有的Promise(无需调用)

如果不想修改data.ts,可以在app.ts中直接使用这个Promise,不用加括号调用。如果要确保连接完成后再启动服务:

// app.ts
mongoDBConnection.then(() => {
  app.listen(8000, () => {
    console.log("App is running at port 8000");
  });
}).catch(err => {
  console.error("Failed to start app due to DB connection issue:", err);
});

内容的提问来源于stack exchange,提问作者Crist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:21:01