MongoDB连接报错:connectionString.startsWith不是函数及undertOne未定义
MongoDB连接及数据插入错误排查与修复
错误1:TypeError: connectionString.startsWith is not a function
问题原因
在moviedb.js中,错误地用new MongoClient()包裹连接字符串,导致传递给MongoClient.connect()的参数不是字符串类型的URI,而是MongoClient实例,触发了startsWith方法调用失败的错误。
修复方案
修改moviedb.js中的URI生成逻辑,直接拼接连接字符串:
import app from './server.js'; import ReviewsDAO from "./dao/reviewsDAO.js"; import mongodb from 'mongodb'; import dotenv from 'dotenv'; const MongoClient=mongodb.MongoClient dotenv.config(); const mongo_username = process.env.MONGO_USERNAME; const mongo_password = process.env.MONGO_PASSWORD; // 直接生成连接字符串,无需用new MongoClient包裹 const uri = `mongodb+srv://${mongo_username}:${mongo_password}@cluster0.b5f7prn.mongodb.net/test`; const port=4444; MongoClient.connect( uri, { maxPoolSize: 50, wtimeoutMS: 2500, useNewUrlParser: true }) .catch(err => { console.error(err.stack) console.error("Error connecting to the database:", err.message) process.exit(1) }) .then(async client => { await ReviewsDAO.injectDB(client) app.listen(port, () => { console.log(`listening on port ${port}`) }) })
同时删除server.js中重复的端口监听代码(避免端口冲突):
import express from 'express'; import cors from 'cors'; import reviews from './api/reviews.route.js'; const app = express(); app.use(cors()); app.use(express.json()); app.use('/api/v1/reviews', reviews); app.use('*', (req,res)=>res.status(404).json({error:"Not found"})); // 删除以下重复的监听代码 // app.listen( 4444, () => { // console.log(`Listening on port 4444`); // }); export default app;
错误2:undertOne() is not defined
问题原因
属于拼写错误,MongoDB的查询方法应为findOne(),代码中误写为undertOne()。
修复方案
检查ReviewsDAO.js或reviews.controller.js中的数据库操作代码,将所有undertOne()替换为findOne(),示例:
// 错误写法 const targetDoc = await collection.undertOne({ _id: ObjectId(docId) }); // 正确写法 const targetDoc = await collection.findOne({ _id: ObjectId(docId) });
内容的提问来源于stack exchange,提问作者Razan Alsaedi
相关产品推荐
相关产品推荐

