Postman发送POST请求遇500错误(Mongo AtlasError)求助
问题描述
开发后端服务器时,使用Postman发送POST请求提交数据,收到500错误,返回信息如下:
{"ok": 0,"code": 8000,"codeName": "AtlasError","name": "MongoError"}
发送的JSON原始数据为数组格式:
[{"username": "Sheba 2","message": "Hey there Sheba3","timestamp": "1601164075833"}]
运行npm start后,终端能正常打印收到的POST数据,但数据未写入MongoDB,期望Postman能收到201创建成功响应。
相关代码文件
server.js
import Messages from './chatModel.js'; import Pusher from 'pusher'; import cors from 'cors'; // Import Dependencies import express from 'express'; import mongoose from 'mongoose'; // App Configuration const app = express(); const port = process.env.PORT || 9000; // Create Middlewares app.use(express.json()); app.use(cors()); // Database Configuration const mongoURI = 'mongodb+srv://chatappadmin:101010@cluster0.fw1gdf8.mongodb.net/ichatDB?retryWrites=true&w=majority' mongoose.connect(mongoURI, { useNewurlParser: true, useCreateIndex: true, useUnifiedTopology: true // useFindAndModify: true // serverApi: ServerApiVersion.v1, }); mongoose.connection.once('open', () => { console.log('DB Connected'); }); // Add API Routes app.get('/', (req, res) => res.status(200).send('Hello ChatApp Backend World')); // app.post('/save/message', (req, res) => { // const dbMessage = req.body // console.log(dbMessage); // Messages.create(dbMessage, (err, data) => { // if (err) { // res.status(500).send(err) // } else { // res.status(201).send(data) // } // }) // }); app.post("/messages/new", (req, res) => { const dbMessage = req.body console.log(dbMessage); Messages.create(dbMessage, (err, data) => { if (err) { res.status(500).send(err); } else { // res.status(201).send(`new messages created: \n ${data}`) res.status(201).send(data); } }); }); // Create listening ports app.listen(port, () => console.log(`Listening on localhost: ${port}`));
chatModel.js
// Creating the database models import mongoose from 'mongoose'; const chatSchema = mongoose.Schema({ username: String, message: String, timestamp: String, }); export default mongoose.model('messagecontents', chatSchema);
package.json
{"name": "chat-app-backend","version": "1.0.0","description": "This is our chat app backend server","main": "server.js","type": "module","scripts": {"test": "echo \"Error: no test specified\" && exit 1","start": "node server.js"},"author": "codershona","license": "ISC","dependencies": {"cors": "^2.8.5","express": "^4.18.2","mongoose": "^5.12.11","nodemon": "^2.0.20","pusher": "^5.1.1-beta"}}
解决方案
问题根源
- 连接参数拼写错误:Mongoose连接配置中的
useNewurlParser应为useNewUrlParser(首字母大写U),拼写错误会导致MongoDB Atlas连接异常,触发AtlasError。 - 数据格式不兼容:请求体是数组格式,但Mongoose v5的
create()方法默认不支持直接传入数组(需额外配置参数),导致写入失败。
修复步骤
1. 修正Mongoose连接参数
在server.js的数据库连接配置中,修正参数拼写:
mongoose.connect(mongoURI, { useNewUrlParser: true, // 修正首字母大写 useCreateIndex: true, useUnifiedTopology: true });
2. 适配数组格式的请求数据
有两种处理方式可选:
- 方式一:支持批量写入
改用insertMany()方法专门处理数组数据,同时兼容单条数据请求:
app.post("/messages/new", (req, res) => { const dbMessages = req.body; console.log(dbMessages); if (Array.isArray(dbMessages)) { Messages.insertMany(dbMessages) .then(data => res.status(201).send(data)) .catch(err => res.status(500).send(err)); } else { Messages.create(dbMessages) .then(data => res.status(201).send(data)) .catch(err => res.status(500).send(err)); } });
- 方式二:使用单条数据请求
若无需批量创建,将Postman的请求体改为单个对象格式:
{"username": "Sheba 2","message": "Hey there Sheba3","timestamp": "1601164075833"}
保持原create()代码即可正常写入。
3. 验证修复效果
重启服务器后重新发送请求,此时应收到201响应,数据成功写入MongoDB。
内容的提问来源于stack exchange,提问作者GCT
相关产品推荐
相关产品推荐

