Bu görevde, bir API oluşturursunuz ve "Minimum Uygulanabilir Ürün" bölümünde listelenen gereksinimleri karşılayan özel ara katman yazılımı yazarsınız.
Canvas'taki ödev sayfanız, bu projeyi göndermek için talimatlar içeriyor. Bulamadıysanız, Okul Personeli ile iletişime geçin.
api/server.jsveindex.jsyi tamamlayarak uygulamayı birbirine bağlayın.api/middleware/middleware.jsiçine aşağıda ayrıntıları verilen dört özel ara katman yazılımı işlevi yazın.- Özel ara yazılımları uygulamadanın uygun yerlerinde kullanın (belirli uç noktalar, tüm yollar veya genel olarak).
users-router.jsdosyasında, birusertarafındanpostslistesini almak ve biruseriçin yeni birpostdepolamak için uç noktalar vardır.
-
logger()loggerher istek(request) hakkında şu bilgileri konsola kaydeder: istek metodu, istek url'si ve bir zaman damgası(timestamp)- bu ara yazılım, API'ye yapılan her istekte çalışır
-
validateUserId()- bu ara yazılım, url'de bir
idparametresi içeren tüm kullanıcı uç noktaları için kullanılacaktır. (örnek:/api/users/:idve bu kimliğe sahip bir kullanıcı olduğundan emin olmak için veritabanını kontrol etmelidir. idparametresi geçerliyse, kullanıcı nesnesinireq.userolarak saklayın ve isteğin devam etmesine izin verinidparametresi veritabanındaki herhangi bir kullanıcı kimliğiyle eşleşmiyorsa,404durumu ve{ mesaj: "kullanıcı bulunamadı" }ile yanıt verin
- bu ara yazılım, url'de bir
-
validateUser()validateUser, bir kullanıcı oluşturmak veya güncellemek için bir istektebodyyi doğrularistek gövdesindegereklinamealanı yoksa,400durumu ve{ mesaj: "gerekli name alanı eksik" }ile yanıt verin
-
validatePost()validatePost, yeni bir gönderi oluşturma isteğindebodyöğesini doğrularistek gövdesindegereklitextalanı yoksa,400durumu ve{ mesaj: "gerekli text alanı eksik" }ile yanıt verin
users ve posts verilerinin kalıcılığını yönetmek için kullanabileceğiniz iki yardımcı dosya vardır. Bu dosyalar api/users/users-model.js ve api/posts/posts-model.js dosyalarıdır. Her iki dosya da aşağıdaki api'yi yayınlar:
get(): find çağrılması, veritabanında bulunan tüm kaynakların bir dizisine çözümlenen bir Promise verir.getById(): argüman olarak biridalır ve bulunursa bu kimliğe sahip kaynağa çözümlenen bir Promise verir.insert(): insert çağırmak, onu bir kaynak nesnesinden geçirmek, onu veritabanına ekler ve yeni kaynağı döndürür.update(): iki bağımsız değişkeni kabul eder, ilki güncellenecek kaynağınkimliğive ikincisi uygulanacakdeğişiklikleresahip bir nesnedir. Başarılı olduğunda, güncellenmiş kaydı döndürür.remove(): remove yöntemi, birinci parametresi olarak birkimlikkabul eder vekaynağıveritabanından başarıyla sildikten sonra, silinen kayıt sayısını döndürür.
users-model.js, getUserPosts() adında, bir kullanıcının kimliği iletildiğinde, user için tüm posts bir listesini döndüren fazladan bir yöntem içerir.
Tüm yardımcı yöntemler bir Promise verir.
Users ve posts kaynakları için Veritabanı Şemaları:
| field | data type | metadata |
|---|---|---|
| id | unsigned integer | primary key, auto-increments, generated by database |
| name | string | required, unique |
| field | data type | metadata |
|---|---|---|
| id | unsigned integer | primary key, auto-increments, generated by database |
| text | text | required |
| user_id | unsigned integer | required, must be the id of an existing user |
Kaynaklar için test verileri sağladık.
npm run resetdbkomutunu çalıştırarak veritabanını sıfırlayabilirsiniz.- Postman veya HTTPie kullanarak çalışmanızı manuel olarak test edin. "npm test" komutuyla otomatik testleri çalıştırın.
- Ek dosyalar oluşturabilirsiniz ancak mevcut dosyaları veya klasörleri taşımayın veya yeniden adlandırmayın.
- Ek kitaplıklar yüklemek veya ek komut dosyaları eklemek dışında
package.jsondosyanızı değiştirmeyin. Mevcut kütüphaneleri güncellemeyin. - Uygulamanızda en iyi yöntemleri izlemeniz ve temiz ve profesyonel kodlar yazmanız önemlidir.