Basit ve hoş olmuş hocam ancak daha fazla parametre, doğrulama ve özellik eklenebilir.
Eklemeyi düşünüyorum sizce ne gibi şeyler ekleyebilirim CRUD dışında yani işte post editle sil dışında. Mesela takiplesme, chat gibi şeyler bu uygulamaya saçma mi kaçar?
Chat eklenebilir ama forum sisteminde bence gereksiz. MongoDB'yi optimize edebilirsin cacheleme koyabilirsin(var mıydı hatırlamıyorum kodda) son 20 konu tarzı şeyler yapabilirsin. Sitemap, benzer konular vb.
service layer hic yok. Butun mantik controller icine gomulmus. Proje buyudukce spagetti olacaginin sinyali.bcrypt auth hash icin dogru bir algoritma. Endustrinin yarisindan fazlasinin sha256 kullandigi dusunulursa su haliyle bile cogundan daha guvenli hashing anlaminda.const authRouter = express.Router();
authRouter.post('/register',registerHandler);
authRouter.post('/login',loginHandler);
authRouter.post('/logout',logoutHandler);
authRouter.get('/profile',authMiddleware,profileHandler); // sadece burada middleware var
authRouter.get('/profile/:slug',userProfileDetail);
authRouter icinde yalnizca profile altinda authMiddleware olmasi kafa karistirici. Secure alani guvence altina almaya calismissin ama hangi sayfalarin secure, hangilerinin public oldugu net degil. postRouter icinde de var benzer durum.secureRoutes ~ publicRoutes gibi 2 ayrim olsa ve secure olanlara middleware otomatik eklense cok daha okunabilir ve pratik olur.const x = new X() //
if (X){ // JS de new falsy donmez - gereksiz indent & kontrol
}
} catch (error) {
next(error);
}
// index.js icinde
app.use((err,req,res,next) => {
const statusCode = err.statusCode || 500;
const message = err.message || "Internal Server Error"; // leak
res.status(statusCode).json({success:false,message:message});
});
Hiç test yok, cok buyuk bir eksiklik bu.
servicelayer hiç yok. Butun mantik Controller icine gomulmus. Proje buyudukce spagetti olacaginin sinyali.
Transaction yok. Mongo replica ile transaction Support sagliyor. Bir seyler ters gittiginde rollback yapamazsin bu mimariyle. Tek doküman degistirdigin CRUD icin sorun degil. Multi-doc degistirdiginde ve kompleks mekanizmalar isin icine girdiginde buyuk problem.
Hata mesajlari hardcoded turkce string olarak Controller icinde islenmis. Merkezi bir organizasyon yok.
Commit organizasyonunun gelismesi gerekiyor, commitler ( 2 tane var zaten ) alakali alakasiz bir suru degisiklik iceriyorlar. Soyle bir commit olmamali.
Eger AI a yazdirmis olsaydin gulucuklu mulucuklu ivir zivir ile dolduracakti Readme'yi, en azindan readme iceren ilk commiti kendin yazdigini gosteriyor, bu da cok iyi bir şey.
Route'larin kendi mantiksal ayrimlara kodlanmasi guzel bir yapi.bcryptauth hash icin dogru bir algoritma. Endustrinin yarisindan fazlasininsha256kullandigi dusunulursa su haliyle bile cogundan daha guvenli hashing anlaminda.
JavaScript:const authRouter = express.Router(); authRouter.post('/register',registerHandler); authRouter.post('/login',loginHandler); authRouter.post('/logout',logoutHandler); authRouter.get('/profile',authMiddleware,profileHandler); // sadece burada middleware var. authRouter.get('/profile/:slug',userProfileDetail);
authRoutericinde yalnizca profile altinda authmiddleware olmasi kafa karistirici. Secure alani guvence altina almaya calismissin ama hangi sayfalarin secure, hangilerinin public oldugu net degil.postRoutericinde de var benzer durum.
Bunun yerinesecureRoutes~publicRoutesgibi 2 ayrim olsa ve secure olanlara middleware otomatik eklense cok daha okunabilir ve pratik olur.
Asagidaki gibi anlamsiz bir pattern var, bu biraz GPT generate etmis ve copy paste edilmis gibi:
Burada ya da burada hatta burada. JS'in 2026 yilinda geldigi standartsiz durum mu boyle bir seyi mumkun kildi diye dusunmedim degil ama cok muhtemelen AI zirvasi.
JavaScript:const x = new X() // if (X){ // JS de new falsy donmez - gereksiz indent & kontrol. }
Son olarak bu proje icin sorun olmasa da genel olarak backend hatasini leak etmeyiz.
Kod:} catch (error) { next(error); } // index.js icinde. app.use((err,req,res,next) => { const statusCode = err.statusCode || 500; const message = err.message || "Internal Server Error"; // leak. res.status(statusCode).json({success:false,message:message}); });
Çok teşekkür ederim hocam sormak istediğim bir soru var. Backend hatasını neden leak etmemeliyiz bu ne gibi bir sorun oluşturur? Ayrıca public olmaması gerekiyorsa dotenv içinde saklamamda bir sakınca olur mu?
unique constraint violated dersen bir sey anlamaz. bu kullanici adi zaten kullaniliyor dersen anlar.Public olmamasi demek, dotenv olmasi demek degil.
Sistem icinde aldığın hatalar, sistemin calisma yontemini barindirir ve bunu Client ile paylasmayi istemezsin. Hem guvenlik nedeniyle hem de defansif programlama doktrini nedeniyle.
Defensive programming - Wikipedia
en.wikipedia.org
Kullandığın Lib'lerde acik olabilir, girilen bilgiler hatada paylasiliyor olabilir vs.
Bunun yerine "su an isleminizi yapamiyoruz' gibi jenerik bir cevap donersin Client tarafa, backend de de ilgili hatayi loglarsin boylece kaybolmaz ama dis dunya ile paylasilmaz.
Ek olarak Client zaten teknik bir insan degildir.unique constraint violateddersen bir şey anlamaz.bu kullanici adi zaten kullaniliyordersen anlar.
Son olarak, HTTP kodlari zaten bu diyalogu kurmak icin fok faydali restful yapilarda. 400 atmaya gerek yok aslinda her şey icin. 429, 422 gibi direkt is akisina uygun hata kodlari zaten mesaja bile gerek birakmaz. Frontend in problemi bu kodu nasıl prezente edecegi.
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.