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

Node.js+MongoDB开发ESN新增POST API遇500内部服务器错误

500 Internal Server Error 当尝试通过POST API存储ESN数据到MongoDB时

我正在开发一个简单的POST API,用于将ESN数据存入MongoDB,技术栈为Node.js。已编写Esn模型、创建ESN的控制器、路由文件及项目入口index.js,但调用接口时出现500 Internal Server Error,无法完成数据存储。

现有代码

模型代码(models/esn.js)

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const esnSchema = new Schema({
  esnName: {
    type: String,
    required: true,
  },
  esnEmail: {
    type: String,
    required: true,
  },
  esnLogo: {
    data: Buffer,
    contentType: String,
    required: false,
  }
})
module.exports = mongoose.model("Esn",esnSchema);

控制器代码(controllers/esn.js)

const Esn = require('../models/esn');

// create new ESN
const createEsn = async (req, res) => {
    
  if (!req.body.esnName) {
    res.status(400).send({ message:   "Content can not be empty!" });
    return;
  }
  const esn = new Esn({
        esnName: req.body.esnName,
        esnEmail: req.body.esnEmail,
       esnLogo: req.body.esnLogo
      });

  // Save Esn in the database
  esn
    .save(esn)
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error      occurred while creating the esn"
      });
    });
};
    
module.exports = {
    createEsn
  };

路由代码(routes/esn.js,当前存在错误)

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const esnSchema = new Schema({
  esnName: {
    type: String,
    required: true,
  },
  esnEmail: {
    type: String,
    required: true,
  },
  esnLogo: {
    data: Buffer,
    contentType: String,
    required: false,
  }
})
module.exports = mongoose.model("Esn",esnSchema);

入口文件(index.js)

const express = require('express'),
cors = require('cors'),
swaggerUi = require('swagger-ui-express'),
swaggerDocument = require('./docs/swagger.json');
const Mongo = require('mongodb');
const { default: mongoose } = require('mongoose');
const mainRoutes = require('./routes/esn')

const app = express();
var url = "mongodb://127.0.0.1:27017/";
var databasename = "skills";

Mongo.MongoClient.connect(url).then((client) => {
console.log('Database connected');
const connect = client.db(databasename);
//const collection = connect.createCollection("esn");
console.log('Database: ', connect);
}).catch((err) => {
// Handling the error
console.log(err.Message);
})

app.use(cors());
app.use(express.json());

app.listen(3000, () => {
console.log('Listening on port 3000!');
});

app.get('/', (req, res) => {
res.send('Hello World');
});

app.use('/api/', mainRoutes);

app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));

问题排查与修正方案

1. 数据库连接方式错误

当前index.js同时混用了原生MongoDB驱动和Mongoose,但控制器使用的是Mongoose模型,而Mongoose并未完成数据库连接。需改用Mongoose统一连接:

修正后的index.js数据库连接部分:

// 替换原MongoClient连接代码
mongoose.connect(`${url}${databasename}`)
  .then(() => console.log('Mongoose数据库连接成功'))
  .catch(err => console.error('数据库连接失败:', err.message));

2. 路由文件内容错误

你提供的路由代码重复了模型定义,实际路由文件应负责绑定请求路径与控制器方法:

修正后的routes/esn.js:

const express = require('express');
const router = express.Router();
const esnController = require('../controllers/esn');

// 绑定POST请求到控制器方法
router.post('/esn', esnController.createEsn);

module.exports = router;

3. Mongoose save方法调用错误

控制器中esn.save(esn)是错误用法,Mongoose文档的save方法无需传入参数:

修正控制器中的save调用:

esn.save()
  .then(data => {
    res.send(data);
  })
  .catch(err => {
    res.status(500).send({
      message: err.message || "Some error occurred while creating the esn"
    });
  });

4. 补充必填字段校验

模型中esnEmail为必填项,但控制器未校验,需补充:

if (!req.body.esnEmail) {
  return res.status(400).send({ message: "esnEmail is required!" });
}

5. 错误信息拼写错误

index.js中err.Message应改为err.message(小写m),否则无法正确打印错误详情。

内容的提问来源于stack exchange,提问作者Fawzy OTHMAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:35:41