Javascript Ajax删除请求路径不一致
我已经设置了一个express服务器来处理不同的请求,其中一个是删除请求。它有时工作,有时给出404。我注意到它发送的url是不同的。因此,如果我将服务器代码更改为处理一条路径,它将一直工作,直到客户端发送另一条路径。我无法理解为什么它发送不同的URL并且不一致。我对网络编程非常陌生;还是个学生。可能是我遗漏了一些非常基本的东西 正在从发送请求 页面 昨天,请求通过以下路径发送: 今天的请求是: 为了防止图像无法加载,以下是URL: 这是客户端请求:(我已经验证了它使用正确的值调用delete) 这是服务器代码:Javascript Ajax删除请求路径不一致,javascript,node.js,ajax,express,http-delete,Javascript,Node.js,Ajax,Express,Http Delete,我已经设置了一个express服务器来处理不同的请求,其中一个是删除请求。它有时工作,有时给出404。我注意到它发送的url是不同的。因此,如果我将服务器代码更改为处理一条路径,它将一直工作,直到客户端发送另一条路径。我无法理解为什么它发送不同的URL并且不一致。我对网络编程非常陌生;还是个学生。可能是我遗漏了一些非常基本的东西 正在从发送请求 页面 昨天,请求通过以下路径发送: 今天的请求是: 为了防止图像无法加载,以下是URL: 这是客户端请求:(我已经验证了它使用正确的值调用de
app.delete("/api/notes/:id", (req, res) => {
let chosenNoteToDelete = req.params.id;
fs.readFile(__dirname + "/db/db.json", (err, data) => {
if(err){
throw err;
}
let json = JSON.parse(data);
for(let i=0; i<json.length; i++){
if(json[i].id === chosenNoteToDelete){
json.splice(i,1);
}
}
fs.writeFile(__dirname + "/db/db.json", JSON.stringify(json), (err) => {
if(err){
throw err;
}
res.send("Successfully deleted");
})
})
});
app.delete(“/api/notes/:id)”,(req,res)=>{
让chosenNoteToDelete=req.params.id;
fs.readFile(uu dirname+“/db/db.json”,(err,data)=>{
如果(错误){
犯错误;
}
让json=json.parse(数据);
for(设i=0;i{
如果(错误){
犯错误;
}
res.send(“已成功删除”);
})
})
});
有人能帮我理解为什么它不一致吗?我如何在服务器上处理它 从以下位置更改客户端代码:
var deleteNote = function(id) {
return $.ajax({
url: "api/notes/" + id,
method: "DELETE"
});
};
为此:
var deleteNote = function(id) {
return $.ajax({
url: "/api/notes/" + id,
method: "DELETE"
});
};
您的相对路径告诉jQuery将您的路径与来自页面URL的路径相结合。您不需要相对路径。您总是希望它是/api/notes/id
,因此需要前导斜杠
服务器代码中需要清理的其他内容
console.Log(err)
或类似的记录机制记录所有可能的错误if(err)throw err
。那对你没有好处,因为没有人能抓住那个错误。相反,您必须始终记录错误,然后通过发送错误响应来处理错误try/catch
.splice()
操作时,您需要在处理.splice()
后返回,或者需要更正迭代索引(因为您刚刚向下移动了它后面的数组元素,因此将错过数组中的下一项)或者您需要向后迭代数组,以便.splice()
操作不会影响迭代
app.delete("/api/notes/:id", (req, res) => {
let chosenNoteToDelete = req.params.id;
fs.readFile(__dirname + "/db/db.json", (err, data) => {
if (err) {
console.log(err);
res.sendStatus(500);
return;
}
try {
let json = JSON.parse(data);
} catch(e) {
console.log(err);
res.sendStatus(500);
return;
}
for (let i = 0; i < json.length; i++) {
if (json[i].id === chosenNoteToDelete) {
json.splice(i, 1);
return;
}
}
fs.writeFile(__dirname + "/db/db.json", JSON.stringify(json), (err) => {
if (err) {
console.log(err);
res.sendStatus(500);
return;
}
res.send("Successfully deleted");
});
});
});
您使用的是
“api/notes/”+id
,但这是一个相对路径。尝试将其更改为“/api/notes/”+id
,以使其成为绝对路径。是否使用基本源代码帮助const base\u url=window.location.origin代码>使用它就像base\u url+“api/notes/”+id
我很感谢您的详细回答。非常有用。由于我还不能投票,我想留下一条评论,尽管我知道这一部分不能用来表示感谢。
app.delete("/api/notes/:id", (req, res) => {
let chosenNoteToDelete = req.params.id;
fs.readFile(__dirname + "/db/db.json", (err, data) => {
if (err) {
console.log(err);
res.sendStatus(500);
return;
}
try {
let json = JSON.parse(data);
} catch(e) {
console.log(err);
res.sendStatus(500);
return;
}
for (let i = 0; i < json.length; i++) {
if (json[i].id === chosenNoteToDelete) {
json.splice(i, 1);
return;
}
}
fs.writeFile(__dirname + "/db/db.json", JSON.stringify(json), (err) => {
if (err) {
console.log(err);
res.sendStatus(500);
return;
}
res.send("Successfully deleted");
});
});
});
const fsp = require('fs').promises;
const path = require('path');
app.delete("/api/notes/:id", async (req, res) => {
let chosenNoteToDelete = req.params.id;
let dataFilename = path.join(__dirname, "/db/db.json");
try {
let data = await fsp.readFile(dataFilename);
let dataArray = JSON.parse(data);
// iterate array backwards so .splice() doesn't cause us to miss elements of the array
let found = false;
for (let i = dataArray.length - 1; i >= 0; i--) {
if (dataArray[i].id === chosenNoteToDelete) {
found = true;
dataArray.splice(i, 1);
}
}
if (found) {
await fsp.writeFile(dataFilename, JSON.stringify(dataArray));
res.send("Successfully deleted");
} else {
res.status(404).send(`Note id ${chosenNoteToDelete} not found.`);
}
} catch(e) {
console.log(e);
res.sendStatus(500);
}
});