我下面的后端路由,模型和控制器的新闻.在这里,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 });
}
};
我也附上了数据库收集的屏幕截图。
1条答案
按热度按时间ahy6op9u1#
getNewsById
不会被调用,因为第一个/newsflashes/:month
满足了您的请求。(how如果你的应用程序知道最后一个参数是
month
还是id
,你必须让终点更具体。
例如: