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
相关产品推荐
相关产品推荐

