postman 为什么我得到一个空数组?

b1zrtrql  于 8个月前  发布在  Postman
关注(0)|答案(1)|浏览(71)

我下面的后端路由,模型和控制器的新闻.在这里,GET方法,PUT方法,PATCH方法和RESISTANCE方法都可以正常工作,除了GET新闻By Id。每当我调用“getNewsById”方法时,Postman都会显示一个空数组。我在MongoDB中创建了“newsflashes”集合和其他一些集合,如“houses”,“users”等。当我调用“getHousesById”和“getUsersById”方法时,它们工作得很好。所以我只有“getNewsById”的问题,它给了我一个空数组。我花了三天的时间来寻找这个问题,但没有找到。拜托,我需要你的帮助。
Models/News.js

import mongoose from "mongoose";

const NewsFlashSchema = new mongoose.Schema(
  {
    title: {
      type: String,
      required: true,
    },
    month: {
      type: String,
      required: true,
    },
    year: {
      type: Number,
      required: true,
    },
    description: {
      type: String,
    },
    documentUrl: {
      type: String,
    },
  },
  { timestamps: true }
);

const NewsFlash = mongoose.model("NewsFlash", NewsFlashSchema);
export default NewsFlash;

Routes/management.js

import express from "express";

import {
  getNewsByMonth,
  getNewsById,
  updateNews,
  deleteNews,
  saveNews,
  saveNewsById,
  getNews,
} from "../controllers/management.js";

const router = express.Router();

router.get("/newsflashes", getNews);
router.get("/newsflashes/:month", getNewsByMonth);
router.get("/newsflashes/:id", getNewsById);
router.post("/newsflashes", saveNews);
router.post("/newsflashes/:id", saveNewsById);
router.patch("/newsflashes/:id", updateNews);
router.delete("/newsflashes/:id", deleteNews);

export default router;

Controllers/management.js

import NewsFlash from "../models/News.js";

// get all newsflashes

export const getNews = async (req, res) => {
  try {
    const newsflashes = await NewsFlash.find();
    res.status(200).json(newsflashes);
  } catch (error) {
    res.status(404).json({ message: error.message });
  }
};

// get newsflashes by id

export const getNewsById = async (req, res) => {
  try {
    const newsflashes = await NewsFlash.findById(req.params.id);
    res.json(newsflashes);
  } catch (error) {
    res.status(404).json({ message: error.message });
  }
};

// get newsflashes by month

export const getNewsByMonth = async (req, res) => {
  const month = req.params.month;
  try {
    const newsflashes = await NewsFlash.find({ month });
    res.status(200).json(newsflashes);
  } catch (err) {
    res.status(500).json({ message: "Failed to retrieve newsflashes" });
  }
};

// add newsflashes

export const saveNews = async (req, res) => {
  const newsflashes = new NewsFlash(req.body);
  try {
    const insertedNews = await newsflashes.save();
    res.status(201).json(insertedNews);
  } catch (error) {
    res.status(400).json({ message: error.message });
  }
};

// add newsflashes by id
export const saveNewsById = async (req, res) => {
  const newsflashes = new NewsFlash(req.body);
  try {
    const insertedNews = await newsflashes.save();
    res.status(201).json(insertedNews);
  } catch (error) {
    res.status(400).json({ message: error.message });
  }
};

//update newsflashes

export const updateNews = async (req, res) => {
  try {
    const updatedNews = await NewsFlash.updateOne(
      { _id: req.params.id },
      { $set: req.body }
    );
    res.status(200).json(updatedNews);
  } catch (error) {
    res.status(400).json({ message: error.message });
  }
};

//delete newsflashes

export const deleteNews = async (req, res) => {
  try {
    const deletedNews = await NewsFlash.deleteOne({ _id: req.params.id });
    res.status(200).json(deletedNews);
  } catch (error) {
    res.status(400).json({ message: error.message });
  }
};

我也附上了数据库收集的屏幕截图。

ahy6op9u

ahy6op9u1#

getNewsById不会被调用,因为第一个/newsflashes/:month满足了您的请求。

router.get("/newsflashes/:month", getNewsByMonth);
router.get("/newsflashes/:id", getNewsById);

(how如果你的应用程序知道最后一个参数是month还是id
你必须让终点更具体。
例如:

router.get("/newsflashes/month/:month", getNewsByMonth);
router.get("/newsflashes/id/:id", getNewsById);

相关问题