axios 我不能让 Postman 去检查一个条目,即使它会为我得到它,这是在Node.js

1zmg4dgp  于 2023-10-18  发布在  iOS
关注(0)|答案(1)|浏览(81)

我正在开发一个React/Express应用程序。有一个删除按钮,但它只返回错误:
xhr.js:251错误http://localhost:3333/entries/2 404(未找到)

EntryDetails.js:39删除条目时出错:AxiosError {message:“请求失败,状态代码为404”,名称:“AxiosError”,代码:'ERR_BAD_REQUEST',配置:{...},请求:XMLHttpRequest,...}
我去 Postman ,并试图删除,它也不会工作。我阴阳怪气:

Cannot DELETE /entries/2

这是真实的几个不同的入口号码,我尝试。奇怪的是,我可以很好地发送GET请求。
我已经检查了路由配置和拼写,并将其放入console.log。数据库已配置好并可访问。我已经检查了名为entries的表是否存在。(我使用的是postgres)它是一个简单的表,不连接到任何其他表,所以不应该有任何相关的约束。
我最初在删除路由中有一个错误,它有条目而不是条目,但我改变了它,并从那时起重新启动了前端和后端几次。
我想这可能与代码的顺序有关,所以我移动了entries.delete after entries.get、entries.post和entries. put。
我在下面写了一些代码。

entryController.js

const express = require("express");
const entries = express.Router();
const {
    getAllEntries,
    getEntry,
    createEntry,
    updateEntry,
    deleteEntry,
} = require("../queries/entries")

[snip]

// =====  DELETE  =====
entries.delete('/entries/:id', async(req, res) => {
    const id = req.params.id;
    const deletedEntry = await deleteEntry(id);
    if (deletedEntry.id) {
        res.status(200).json(deletedEntry);
    } else {
        res.status(404).json( {error: "Entry not found."} );
    }
});

module.exports = entries;
entries.js

const db = require("../db/dbconfig");

[SNIP]

// === DELETE AN ENTRY (DESTROY) ===
const deleteEntry = async(id) => {
    try {const deletedEntry = await db.one(
        "DELETE FROM entries WHERE id = $1 RETURNING *", id
    );
    return deletedEntry;
    } catch(error){
        return error;
        }
};

[SNIP]

module.exports = { 
    getAllEntries,
    getEntry,
    createEntry,
    updateEntry,
    deleteEntry,
    billsToSendToInsurance,
}

我认为路线处理是好的,如果这甚至是相关的。

const deleteEntry = () => {
    console.log("deleteEntry");
    const deleteURL = `${API}/entries/${id}`;
    console.log(deleteURL);
    axios.delete(deleteURL, { headers: { 'Content-Type': 'application/json' } })
      .then((response) => {
        navigate(`/entries`);
      })
      .catch((error) => console.error("Error Deleting entry:", error));
  };

我不知道这是否相关,但我也不能更新一个条目,而不更新所有条目。
有什么建议吗?
编辑添加以回应评论:在app.js中,

const entryController = require("./controllers/entryController.js");
    app.use("/entries", entryController);

deleteURL中的API为

const API = process.env.REACT_APP_API_URL;
rsl1atfo

rsl1atfo1#

问题是,您正在将所有/entries调用重定向到entryController

app.use("/entries", entryController);

然后在控制器内部调用delete,再次在路径中使用/entries

entries.delete('/entries/:id', async(req, res) => {
    // your code...
});

因此,这实际上使路由为${API}/entries/entries/:id,这显然不存在。
要解决这个问题,只需在删除调用时删除/entries

entries.delete('/:id', async(req, res) => {
    // your code...
});

然后它应该工作。

相关问题