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

Postman POST请求正常,Angular发起POST无法创建MongoDB记录

问题描述

尝试通过Angular前端调用接口在MongoDB中创建新记录,发起POST请求后无任何报错,但记录并未创建成功。用Postman发起相同请求却能正常创建记录。


后端代码

const express = require('express');
const router = express.Router();
const Munkafolyamat = require('../models/munkafolyamat');

router.post('/addmunka', async (req, res) => {
    console.log('made it to backend')
    const munka = new Munkafolyamat({
      title: req.body.title,
      description: req.body.description,
      completed: req.body.completed
    });
    try {    
      const newMunka = await munka.save();
      res.status(201).json(newMunka);
    } catch (error) {
      res.status(400).json({ message: error.message });
    }
  });

前端API服务代码

createMunka(munka: any): Observable<any> {
    return this.http.post(`${this.apiUrl}/munkas/addmunka`,munka);
  }

组件调用服务代码

save(){
      this.teendo.elvegezte='jani';
      this.teendo.todo='megkőcsináni';
      this.teendok.push(this.teendo)
      this.munka.inditotta=this.inditotta;
      this.munka.iroda=this.iroda;
      this.munka.tipus=this.tipus;
      this.munka.eszkozlista=this.eszkozlista;
      this.munka.status=this.status;
      this.munka.teendok=this.teendok;
      
      console.log('munka: ', this.munka);
      this.apiService.createMunka(this.munka)
    }

Mongoose Schema代码

const mongoose = require('mongoose');

const munkafolyamatSchema = new mongoose.Schema({
    tipus:String,
    inditotta:String,
    iroda:String,
    status:String,
    eszkozlista:[String],
    teendok:[{elvegezte:String,todo:String}]

  });
  module.exports = mongoose.model('Munkafolyamat', munkafolyamatSchema, 'Munkafolyamat');

问题排查与修复

核心问题1:后端字段不匹配

后端创建Munkafolyamat实例时使用了title、description、completed字段,但Schema中根本没有定义这些字段,反而前端传递的是Schema里的tipus、inditotta等字段。Mongoose默认会过滤Schema不存在的字段,导致保存的是无效空数据,且不会抛出错误。

核心问题2:Angular请求未订阅

Angular的HTTP请求是冷Observable,必须调用subscribe()才会实际发送请求。组件中仅调用了createMunka方法但未订阅,请求根本没有发出。


修复步骤

1. 修正后端代码

将创建实例的字段替换为Schema中定义的字段:

router.post('/addmunka', async (req, res) => {
    console.log('made it to backend')
    const munka = new Munkafolyamat({
      tipus: req.body.tipus,
      inditotta: req.body.inditotta,
      iroda: req.body.iroda,
      status: req.body.status,
      eszkozlista: req.body.eszkozlista,
      teendok: req.body.teendok
    });
    try {    
      const newMunka = await munka.save();
      res.status(201).json(newMunka);
    } catch (error) {
      res.status(400).json({ message: error.message });
    }
  });

2. 修正前端组件代码

为HTTP请求添加订阅,同时处理响应和错误:

save(){
      this.teendo.elvegezte='jani';
      this.teendo.todo='megkőcsináni';
      this.teendok.push(this.teendo)
      this.munka.inditotta=this.inditotta;
      this.munka.iroda=this.iroda;
      this.munka.tipus=this.tipus;
      this.munka.eszkozlista=this.eszkozlista;
      this.munka.status=this.status;
      this.munka.teendok=this.teendok;
      
      console.log('munka: ', this.munka);
      this.apiService.createMunka(this.munka)
        .subscribe({
          next: (response) => console.log('创建成功:', response),
          error: (err) => console.error('创建失败:', err)
        });
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:57:04