Express Routing Özelliği Nasıl Kullanılır?
Vložit
- čas přidán 20. 08. 2024
- Bu videoda POST ve DELETE HTTP metodlarını kullanarak yeni endpoint'ler oluşturduk ve aynı adres altındaki endpoint'leri tek bir Express Router altında topladık.
GitHub: github.com/rea...
Twitter: / reactdersleri
#react #reactjs #reactdersleri #reacttutorial #express #router #routing #restfulAPI
çok güzel anlatmışsınız. Emeğinize sağlık
post yapınca 500Internal Server Error hatası veriyor kodlara baktım sorun görünmüyor. get yapınca veriler geliyor
16:24 teki ödev için örnek cevabım:
server.put("/aktorler/:id", (req, res) => {
const guncelle_aktor_id = req.params.id;
const guncelle_aktor_body = req.body;
const guncel_aktor = data.find(
(aktor) => aktor.id === Number(guncelle_aktor_id)
);
if (guncel_aktor) {
if (guncelle_aktor_body.isim) {
guncel_aktor.isim = guncelle_aktor_body.isim;
}
if (guncelle_aktor_body.filmler) {
guncel_aktor.filmler = guncelle_aktor_body.filmler;
}
if (guncelle_aktor_body.isim || guncelle_aktor_body.filmler) {
res.status(200).json(guncel_aktor);
} else {
res.status(404).json({
errorMessage:
"isim veya filmler anahtarlarına ait bir güncelleme isteğini doğru formatta yapmadınız ",
});
}
} else {
res
.status(404)
.json({ errorMessage: "Düzenlemeye calistiginiz aktor bulunamadi" });
}
});
Bu yaptığın doğru fakat put için değilde patch için olabilirdi .Put diyorsak tüm keyleri(isim,filmler) almak required(zorunlu) olmalıdır. Ama ben burada sadece ismi de güncelleyebiliyorum ya da sadece filmleri de güncelleyebiliyorum. :)
@@mehmetaliakdemir7849 Dogrudur, ben orada aralarindaki farki bilmeden yapmistim.
Example between PUT and PATCH
PUT
If I had to change my firstname then send PUT request for Update:
{ "first": "Nazmul", "last": "hasan" } So, here in order to update the first name we need to send all the parameters of the data again.
PATCH:
Patch request says that we would only send the data that we need to modify without modifying or effecting other parts of the data. Ex: if we need to update only the first name, we pass only the first name.
Hocam konular,kavramlar kafamda net değil. Bu yüzden saçmalarsam kusura bakmayın.
Güncelleme işlemlerinde,
filmlere yeni film eklemek istediğimde req.body içinde gelen değerler ile eski değerler yer değiştirmiş oluyor.
RestApi mantığı açısından soruyorum,
eski_aktor.filmler kaybolmasın yeni değer eklensin istersek bunu frontend tarafından req.body içine eski filmleri ekleyip mi yollamak mantıklı?
yoksa patch ile yapılabiliyor mu?
Merhaba, şu yöntem işinize yarayabilir: Yeni bir route
router.put("/filmekle/:id", (req, res) => {
const guncelle_aktor_id = req.params.id;
const eklenecek_film = req.body.filmler;
let guncel_aktor = data.find(
(aktor) => aktor.id === Number(guncelle_aktor_id)
);
if (guncel_aktor) {
let filmler = guncel_aktor.filmler.concat(eklenecek_film);
guncel_aktor.filmler = [...new Set(filmler)]; //aynı film birden fazla gönderilirse diğer gönderilenler eklenmesin diye
res.status(200).json(guncel_aktor);
} else {
res.status(404).json({
errorMessage: "eklenemedi ",
});
}
});
hocam güncelleme işlemini :
const id = parseInt(req.params.id);
const updateActor = req.body;
const selectActor = data.find((aktor) =>
aktor.id === id
);
if (selectActor) {
data.map(item => item.id === id ? {...item,...updateActor}:item)
}
yapmaya çalışıyorum ama güncelleme olmuyor
Array.map yeni bir array döner,
if (selectActor) {
data = data.map(item => item.id === id ? {...item,...updateActor}:item)
}
hocam silmek için Array.shift metodunu kullanabilirsiniz.
Aktorler.shift(Actorler.findIndex( aktor => aktor.id === silinecek_id ), 1)
.shift() metodu diziyi mutate ediyor. React ile bu tarz islemleri yaparken istenmeyen hatalarla karsilasmamak icin "immutability" prensibine bagli kalmanizi oneririm.
Merhaba hocam öncelikle videolar için teşekkürler. React üzerinden bir uygulama geliştiriyorum. Yaptığım uygulamayı birden fazla kullanıcının kullanması gerekiyor. Uygulamada değişiklik yapan kullanıcının ekranında değişikliği algılıyor ve servera veri gönderiliyor. Fakat öteki kullanıcıların serverdan sürekli veriyi çekmesi gerekiyor. Bunun için belirli aralıklarla servera istek mi atmam gerekiyor ?
İhtiyacınız olan şey web socket. socket.io sitesine gidin ve kullanımını araştırın işinizi görecektir.
Servera belli aralıklarla istek atmak çalışır ama sunucuyu yorar, gereksiz trafik harcar. Socketler bu iş için geliştirilmiş. Orada kullanıcı için bir bağlantı açıyor ve bağlanılan yerde değişiklik olduğunda onu kullanıcıya servis ediyor.
Cevap için teşekkürler. Socket ile geliştirme videosu gelirse cok mutlu olurum. Genelde chat uygulaması yapıyorlar. Farklı bir proje süper olur. Kolay gelsin
Chat ile sizin anlattığınız şey aynı: servera istek göndermeye gerek kalmadan verinin otomatik olarak servis edilmesi.
Hocam put requesti böyle yaptim ama ne dersiniz.
server.put('/aktorler/:id', (req, res) => {
const { id } = req.params;
let yeni_aktor = req.body;
let eski_aktor = data.find(item => item.id === Number(id));
if (eski_aktor) {
for (i in yeni_aktor) {
eski_aktor[i] = yeni_aktor[i]
}
res.status(200).send(yeni_aktor)
} else {
res.status(404).json({ errorMessage: 'Güncellemek istediginiz aktor bulunamadi' })
}
})
data[i]= yeni_aktor olmasi gerekmez mi?
@@ReactDersleri Hocam merhaba, dediğiniz şekilde deneyince eski_aktor için herhangi bir değişim yapmayacak ama yani eski_aktor[i] = yeni_aktor[i] şeklinde olması gerekmez mi ? Yoksa yanlış mı düşünüyorum. Ben de şu şekilde yaptım; // UPDATE
server.put("/aktorler/:id",(req,res)=>{
const {id} = req.params
const duzenlenen_aktor = req.body
const aktor = data.find((aktor) => aktor.id === parseInt(id))
if(aktor){
for (i in duzenlenen_aktor){
aktor[i] = duzenlenen_aktor[i]
}
res.status(200).json(duzenlenen_aktor)
}else{
res.status(404).send("aradığınız aktor bulunamadı bu yüzden güncelleme yapılamaz")
}
})
Merhaba Hocam bu şekilde bir yol ile çözümledim.
server.put("/aktorler/:id",(req, res)=>{
const id = req.params.id
const yeniGelecekAktor = req.body
const degisecekAktor = data.find(
(aktor) => aktor.id === Number(id))
if(degisecekAktor){
degisecekAktor.isim = yeniGelecekAktor.isim
degisecekAktor.filmler = yeniGelecekAktor.filmler
res.status(200).send(degisecekAktor)
}else{
res.status(404).json({
errorMessage: "Değiştirme İşlemi Başarısız"
})
}
})
server.put('/actors/:id', (req, res)=>{
let update_actor_id = req.params.id;
let update_actor_body = req.body;
console.log("updated_Actor_body",update_actor_body);
selected_actor = data.find((actor) => actor.id === Number(update_actor_id));
if(selected_actor){
selected_actor.name = update_actor_body.name;
selected_actor.movies = update_actor_body.movies;
res.status(200).json({errorMessage : "false", process: "update actor process is succesfull"});
}else{
res.status(404).send(errorMessage, "There is no actor for update");
}
});