Node.js v18.13.0应用因MongoParseError崩溃,如何修复?
问题:WhatsApp克隆项目MongoDB连接崩溃
我正在开发WhatsApp克隆项目,前端已完成。但在尝试连接MongoDB并通过Postman API发送GET、POST请求时,代码出现崩溃。我的package.json中配置了"type":"module"。
终端错误输出
Listening on localhost:9000 D:\Project\Guvi\Task\React\clone-whatsapp\wa-back\node_modules\mongodb\lib\connection_string.js:282 throw new error_1.MongoParseError(`${optionWord} ${Array.from(unsupportedOptions).join(', ')} ${isOrAre} not supported`); ^ MongoParseError: option usecreateindex is not supported at parseOptions (D:\Project\Guvi\Task\React\clone-whatsapp\wa-back\node_modules\mongodb\lib\connection_string.js:282:15) at new MongoClient (D:\Project\Guvi\Task\React\clone-whatsapp\wa-back\node_modules\mongodb\lib\mongo_client.js:45:63) at D:\Project\Guvi\Task\React\clone-whatsapp\wa-back\node_modules\mongoose\lib\connection.js:802:16 at new Promise (<anonymous>) at Connection.openUri (D:\Project\Guvi\Task\React\clone-whatsapp\wa-back\node_modules\mongoose\lib\connection.js:799:19) at D:\Project\Guvi\Task\React\clone-whatsapp\wa-back\node_modules\mongoose\lib\index.js:409:10 at D:\Project\Guvi\Task\React\clone-whatsapp\wa-back\node_modules\mongoose\lib\helpers\promiseOrCallback.js:41:5 at new Promise (<anonymous>) at promiseOrCallback (D:\Project\Guvi\Task\React\clone-whatsapp\wa-back\node_modules\mongoose\lib\helpers\promiseOrCallback.js:40:10) at Mongoose._promiseOrCallback (D:\Project\Guvi\Task\React\clone-whatsapp\wa-back\node_modules\mongoose\lib\index.js:1262:10) { [Symbol(errorLabels)]: Set(0) {} } Node.js v18.13.0 [nodemon] app crashed - waiting for file changes before starting...
我的代码
import express from 'express'; import mongoose from 'mongoose'; import Messages from './dbMessages.js'; const app = express(); const port = process.env.PORT || 9000; app.use(express.json()); const connection_url = 'mongodb+srv://sarath_babayaga:Sarath@1996@cluster0.wzoouq0.mongodb.net/clone-whatsapp-backend?retryWrites=true&w=majority' mongoose.connect(connection_url,{ useCreateIndex: true, useNewUrlParser: true, useUnifiedTopology: true }) app.get('/',(req,res)=>res.status(200).send('hello world!!!!')); app.get('/messages/sync', (req, res) => { const dbMessage = req.body Messages.find ((err, data) => { if (err) { res.status(500).send(err) } else { res.status(200).send(data) } }) }) app.post('/messages/new', (req, res) => { const dbMessage = req.body Messages.create(dbMessage, (err, data) => { if (err) { res.status(500).send(err) } else { res.status(201).send(data) } }) }) app.listen(port,()=>console.log(`Listening on localhost:${port}`));
解决方案
错误原因
你使用的Mongoose版本较新,useCreateIndex、useNewUrlParser、useUnifiedTopology这些配置选项已被废弃,新版本MongoDB驱动不再支持,因此抛出MongoParseError。
修复步骤
- 移除
mongoose.connect中的废弃配置选项,新版本Mongoose会自动启用这些特性,无需手动配置。 - 建议为数据库连接添加错误监听,方便排查后续问题。
- 可选:将回调风格的数据库操作改为Promise/async-await写法,代码更易维护。
修改后的代码
import express from 'express'; import mongoose from 'mongoose'; import Messages from './dbMessages.js'; const app = express(); const port = process.env.PORT || 9000; app.use(express.json()); const connection_url = 'mongodb+srv://sarath_babayaga:Sarath@1996@cluster0.wzoouq0.mongodb.net/clone-whatsapp-backend?retryWrites=true&w=majority'; // 连接数据库并添加错误监听 mongoose.connect(connection_url) .then(() => console.log('MongoDB连接成功')) .catch(err => console.error('MongoDB连接失败:', err)); app.get('/',(req,res)=>res.status(200).send('hello world!!!!')); app.get('/messages/sync', (req, res) => { Messages.find() .then(data => res.status(200).send(data)) .catch(err => res.status(500).send(err)); }) app.post('/messages/new', (req, res) => { const dbMessage = req.body; Messages.create(dbMessage) .then(data => res.status(201).send(data)) .catch(err => res.status(500).send(err)); }) app.listen(port,()=>console.log(`Listening on localhost:${port}`));
内容的提问来源于stack exchange,提问作者sarath_babayaga
相关产品推荐
相关产品推荐

