如何使用 vanilla JavaScript 从列表中删除项目?
How to delete an item from a list using vanilla JavaScript?
我正在尝试使用 vanilla javascript 和 axios
构建图书目录。我想要的是每次我按下删除按钮时,这本书都会从列表中删除。但是每次我按下按钮时,它都会显示错误。不知道哪里出了问题
我的 app.js
文件:
const delBtn = [...document.querySelectorAll(".del-btn")];
delBtn.map((button) => {
button.addEventListener("click", async (e) => {
e.preventDefault();
const idValue =
e.currentTarget.parentElement.firstElementChild.nextElementSibling
.nextElementSibling.innerHTML;
try {
const res = await axios.delete(`/api/books/${Number(idValue)}`);
const data = res.data.find((book) => book.id === Number(idValue));
if (!data) {
console.log(`No book with such${idValue}`);
}
const filteredBook = books.filter((book) => {
if (book.id !== Number(idValue)) {
const { title, author, image, desc, id } = book;
return `
<div class="card flex" style="width: 18rem; min-height:24rem;">
<img
src=${image}
class="card-img-top w-50 rounded mx-auto d-block"
alt="#"
/>
<div class="card-body">
<h4 class="card-title">${title}</h4>
<h6>Written by: <span class="text-primary">${author}</span></h6>
<p>${id}</p>
<p class="card-text"> ${desc}</p>
<a href="#" class="btn btn-primary">Go somewhere</a>
<a
class="btn btn-danger del-btn"
type="submit"
">Delete</a>
</div>
</div>
`;
}
});
card.innerHTML = filteredBook;
} catch (error) {
console.log("Error");
}
});
我的 server.js
文件:
app.delete("/api/books/:id", (req, res) => {
const { id } = req.params;
const book = books.find((book) => book.id === Number(id));
if (!book) {
return res
.status(400)
.json({ success: false, msg: `No book with the id of ${id}` });
}
const newBook = books.filter((book) => book.id !== Number(id));
return res.status(200).json({ success: true, data: newBook });
});
app.listen(PORT, () => {
console.log("Server is running on port 5000...");
});
看起来像这样:
const data = res.data.find((book) => book.id === Number(idValue));
需要改为:
const data = res.data.data.find((book) => book.id === Number(idValue));
res.data
是 axios 响应数据,然后您需要在响应中获得一个 data
元素。您的回复是这样的:
return res.status(200).json({ success: true, data: newBook });
所以,axios 的 res.data
给你这个 { success: true, data: newBook }
所以要得到 newBook
数据,你需要 res.data.data
.
仅供参考,所有这些都是基本调试。您记录您的确切错误,按照它给您的提示进行操作,然后记录其他中间值以查看哪里出了问题,通常您随后可以看到错误所在。
我正在尝试使用 vanilla javascript 和 axios
构建图书目录。我想要的是每次我按下删除按钮时,这本书都会从列表中删除。但是每次我按下按钮时,它都会显示错误。不知道哪里出了问题
我的 app.js
文件:
const delBtn = [...document.querySelectorAll(".del-btn")];
delBtn.map((button) => {
button.addEventListener("click", async (e) => {
e.preventDefault();
const idValue =
e.currentTarget.parentElement.firstElementChild.nextElementSibling
.nextElementSibling.innerHTML;
try {
const res = await axios.delete(`/api/books/${Number(idValue)}`);
const data = res.data.find((book) => book.id === Number(idValue));
if (!data) {
console.log(`No book with such${idValue}`);
}
const filteredBook = books.filter((book) => {
if (book.id !== Number(idValue)) {
const { title, author, image, desc, id } = book;
return `
<div class="card flex" style="width: 18rem; min-height:24rem;">
<img
src=${image}
class="card-img-top w-50 rounded mx-auto d-block"
alt="#"
/>
<div class="card-body">
<h4 class="card-title">${title}</h4>
<h6>Written by: <span class="text-primary">${author}</span></h6>
<p>${id}</p>
<p class="card-text"> ${desc}</p>
<a href="#" class="btn btn-primary">Go somewhere</a>
<a
class="btn btn-danger del-btn"
type="submit"
">Delete</a>
</div>
</div>
`;
}
});
card.innerHTML = filteredBook;
} catch (error) {
console.log("Error");
}
});
我的 server.js
文件:
app.delete("/api/books/:id", (req, res) => {
const { id } = req.params;
const book = books.find((book) => book.id === Number(id));
if (!book) {
return res
.status(400)
.json({ success: false, msg: `No book with the id of ${id}` });
}
const newBook = books.filter((book) => book.id !== Number(id));
return res.status(200).json({ success: true, data: newBook });
});
app.listen(PORT, () => {
console.log("Server is running on port 5000...");
});
看起来像这样:
const data = res.data.find((book) => book.id === Number(idValue));
需要改为:
const data = res.data.data.find((book) => book.id === Number(idValue));
res.data
是 axios 响应数据,然后您需要在响应中获得一个 data
元素。您的回复是这样的:
return res.status(200).json({ success: true, data: newBook });
所以,axios 的 res.data
给你这个 { success: true, data: newBook }
所以要得到 newBook
数据,你需要 res.data.data
.
仅供参考,所有这些都是基本调试。您记录您的确切错误,按照它给您的提示进行操作,然后记录其他中间值以查看哪里出了问题,通常您随后可以看到错误所在。