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

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"}}

解决方案

问题根源

  1. 连接参数拼写错误:Mongoose连接配置中的useNewurlParser应为useNewUrlParser(首字母大写U),拼写错误会导致MongoDB Atlas连接异常,触发AtlasError。
  2. 数据格式不兼容:请求体是数组格式,但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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:10:59