Node.js, JavaScript kodunu bir tarayıcının dışında çalıştırmanıza izin veren, chrome'un v8 motoru üzerine kurulu açık kaynaklı bir JavaScript çalışma zamanıdır.

Olay modeli, ekosistemi ve hızı, Node.js'yi sunucu tarafı uygulamalar için en çok aranan ve kullanılan çalışma zamanlarından biri haline getirdi.

Çoğu Node.js API sunucusu, Express veya başka bir çerçeve kullanır. Ancak, sadece birkaç adımda çerçevesiz basit bir Node.js API'si de oluşturabilirsiniz.

1. Adım: Geliştirme Ortamınızı Ayarlama

Bir proje dizini oluşturun ve CD çalıştırarak içine:

mkdir nodejs-api
CD nodejs-api

Ardından, başlat npm projenizde çalıştırarak:

npm başlangıç ​​-y

Bu CRUD API'si, bir NoSQL veritabanı olan MongoDB'nin ve onun popüler ODM'si olan mongoose'un kullanımını içerecektir.

Yüklemek için aşağıdaki komutu çalıştırın firavun faresi:

npm Yüklemek firavun faresi

Ardından, bir server.js projenizin kök dizininde dosya oluşturun ve bir sunucu oluşturmak için aşağıdaki kod bloğunu ekleyin:

const http = gerekmek("http");
const server = http.createServer((req, res) => {});
instagram viewer

server.listen (3000, () => {
konsol.kayıt(`Sunucu çalışıyor`);
});

Bu kod bloğu, bir çekirdek Node.js modülü olan http modülünü içe aktarır. http modülü, Node.js'nin HTTP üzerinden veri aktarmasına izin verir. Bu modül, bir sunucu oluşturmak için gereken yöntemleri içerir.

Ardından, http modülünün sunucu oluştur bir sunucunun örneğini oluşturan ve döndüren yöntem. bu sunucu oluştur yöntem, parametre olarak bir istek ve yanıt nesnesi ile bir geri arama işlevi alır.

Ardından, kod çağırır dinlemek döndürülen sunucu örneğindeki yöntem. Bu, sunucunun verilen bağlantı noktasındaki trafiği dinlemeye başlamasını sağlar. bu dinlemek yöntem başarılı olduğunda bir geri aramayı (ikinci argüman) başlatır.

Son olarak, adlı iki dizin oluşturun rotalar ve modeller projenizin kök dizininde. bu rotalar klasörü API'niz için yönlendirme mantığını içerecektir. model veritabanı ile ilgili her şeyi içerecektir.

Adım 2: Uygulamanızı Bir Veritabanına Bağlama

İçinde server.js, içe aktarmak firavun faresi:

const firavun faresi = gerekmek("firavun faresi");

Ara bağlamak yöntem firavun faresi ve MongoDB URI'nizi argüman olarak iletin:

firavun faresi.bağlan("MongoDB_URI")

3. Adım: Bir API Modeli Oluşturma

Basit bir blog uygulaması için bir CRUD API oluşturun. senin içinde modeller klasör, bir blogModel.js dosyasını açın ve dosyanıza aşağıdaki kodu ekleyin:

const firavun faresi = gerekmek("firavun faresi");
const blogSchema = firavun faresi. Şema({
Başlık: {
tip: Sicim,
gerekli: [doğru, "Blogun bir başlığı olmalıdır"],
},
gövde: {
tip: Sicim,
gerekli: [doğru, "Blogun bir gövdesi olmalı"],
},
});
modül.ihracat = mongoose.model("Blog", blogŞema);

Yukarıdaki kod bloğu, iki özelliğe sahip bir firavun faresi modeli oluşturur ve bunları bir MongoDB veritabanına eşler.

Bu modeldeki her iki özellik de bir Sicim ile yaz gereklidir ayarlanır doğru. Bir istek gövdesi özelliklerden herhangi birini içermiyorsa, eşlik eden hata mesajları görüntülenecektir.

Son satır, bir firavun faresi modeli oluşturur ve dışa aktarır. model yöntem firavun faresi. Model adını iletin (Blog) ilk argüman ve bir şema olarak (blogŞema) ikinci argüman olarak.

Adım 4: Uygulamanızda Yönlendirme Uygulaması

yardımı olmadan Express gibi çerçeveler, API'nize yapılan her isteği işlemek için mantığı manuel olarak oluşturmanız gerekir.

İlk olarak, bir blogRoutes.js senin dosyanda rotalar klasörü, ardından blog modelini içe aktarın:

const blog = gerekmek("../models/blogModel");

Ardından, bir eşzamansız oluşturun yönlendirici işlev, geçiş istek ve res parametre olarak ve işlevi dışa aktarın:

const yönlendirici = zaman uyumsuzişlev (talep, res) {};
modül.ihracat = yönlendirici;

Bu işlev, tüm yönlendirme mantığınızı içerecektir.

Ardından, yönlendirme mantığını rotaya göre uygulayacaksınız.

Rotaları ALIN

Aşağıdaki kod bloğunu dosyanıza ekleyin. yönlendirici uygulamak için işlev ALMAK yapılan istekler için rota işleyicisi /api/blogs:

// GET: /api/bloglar
if (req.url "/api/blogs"&& gerekli yöntem "ALMAK") {
// tüm blogları al
const bloglar = beklemek Blog.find();

// Ayarlamak en durum kod veiçerik-tip
res.writeHead (200, { "İçerik türü": "uygulama/json" });

// veri gönder
res.son(JSON.stringify(bloglar));
}

Yukarıdaki kod bloğu şunları kontrol eder: url ve yöntem istek nesnesinin özellikleri. Daha sonra veri tabanından tüm blogları bulmak firavun faresi modelinde yöntem (Blog).

Daha sonra, yazmakKafa yöntem res, yanıt nesnesi. Bu yöntem, üç argüman verilen bir yanıt başlığı gönderir: bir durum kodu, isteğe bağlı bir durum mesajı ve başlıklar. bu 200 durum kodu başarılı bir yanıtı temsil eder ve bu API çağrısı için içerik türü uygulama/json.

Son olarak, sunucunun askıda kalmamasını sağlamak için isteği kapat son yöntem res. çağrı JSON.stringify dönüştürür bloglar bir JSON dizesine itiraz edin ve bunu son method onu yanıt gövdesi olarak döndürür.

Aşağıdaki kod bloğunu dosyanıza ekleyin. yönlendirici uygulamak için işlev ALMAK tek bir kaynak için rota işleyici:

// GET: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && gerekli yöntem "ALMAK") {
denemek {
// url'den kimliği çıkar
const id = gerekli.url.split("/")[3];

// DB'den blog al
const blog = beklemek Blog.findById (kimlik);

eğer (blog) {
res.writeHead (200, { "İçerik türü": "uygulama/json" });
res.son(JSON.stringify(Blog));
} başka {
atmakyeniHata("Blog mevcut değil");
}
} tutmak (hata) {
res.writeHead (404, { "İçerik türü": "uygulama/json" });
res.son(JSON.stringify({ İleti: hata }));
}
}

Bu kod, kibrit url'nin biçimle eşleşip eşleşmediğini kontrol etmek için argüman olarak bir regex ifadesini alan yöntem: /api/blogs/.

Ardından, ayıklayın İD mülk url onu çağırarak dize bölmek yöntem. Bu yöntem argüman olarak bir kalıp alır (/), dizeyi desene göre böler ve bir dizi döndürür. Bu dizinin üçüncü öğesi, İD.

Son olarak, eşleşen belgeyi alın İD veritabanınızdan. Varsa, bir gönderin 200 cevap kodu, isteği kapatın ve alınan blogu gönderin. Mevcut değilse, bir hata atın ve onu catch bloğunda yanıt olarak gönderin.

POST Rotası

uygulamak için aşağıdaki kod bloğunu yönlendirici işlevinize ekleyin. İLETİ rota işleyici:

// POST: /api/bloglar/
if (req.url "/api/blogs"&& gerekli yöntem "İLETİ") {
denemek {
izin ver vücut = "";

// data olayını dinle
gerekli("veri", (parça) => {
gövde += parça.toString();
});

// Dinle sonEtkinlik
gerekli("son", zaman uyumsuz () => {
// Blog yarat
İzin Vermek blog = yeni Blog(JSON.parse (gövde));

// DB'ye kaydet
beklemek blog.save();
res.writeHead (200, { "İçerik türü": "uygulama/json" });
res.son(JSON.stringify(Blog));
});
} tutmak (hata) {
konsol.log (hata);
}
}

İstek nesnesi şunları uygular: Node.js ReadableStream arayüz. Bu akış bir veri ve bir son istek gövdesinden verilere erişmenizi sağlayan olay.

Bu kod, data olayını dinler ve onu bir dizgeye dönüştürerek ve onu gövde değişken. İçinde son olay işleyicisi, bir Blog ayrıştırılmış gövde dizesiyle örnek. Ardından yeni blogu kaydeder, durum kodunu ve içerik başlığını gönderir ve isteği kapatır.

PUT Rotası

uygulamak için aşağıdaki kod bloğunu yönlendirici işlevinize ekleyin. KOY rota işleyici:

// PUT: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && gerekli yöntem "KOY") {
denemek {
// url'den kimliği çıkar
const id = gerekli.url.split("/")[3];
izin ver vücut = "";

gerekli("veri", (parça) => {
gövde += parça.toString();
});
gerekli("son", zaman uyumsuz () => {
// Bul ve Güncellemebelge
İzin Vermek güncellenmişBlog = beklemek Blog.findByIdAndUpdate (kimlik, JSON.parse (gövde), {
yeni: doğru,
});

res.writeHead (200, { "İçerik türü": "uygulama/json" });
res.son(JSON.stringify(güncellenmişBlog));
});
} tutmak (hata) {
konsol.log (hata);
}
}

PUT istek işleyicisi ile hemen hemen aynıdır. İLETİ istek işleyicisi, bunun dışında İD mülk url ilgili blogu güncellemek için.

Rotayı SİL

Uygulamanızı uygulamak için aşağıdaki kod bloğunu yönlendirici işlevinize ekleyin. SİLMEK rota işleyici:

// SİLMEK: /api/bloglar/:İD
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && gerekli yöntem "SİLMEK") {
denemek {
const id = gerekli.url.split("/")[3];

// Silmek Blog itibaren DB
beklemek Blog.findByIdAndDelete (kimlik);
res.writeHead (200, { "İçerik türü": "uygulama/json" });
res.end (JSON.stringify({ mesaj: "Blog başarıyla silindi" }));
} tutmak (hata) {
res.writeHead (404, { "İçerik türü": "uygulama/json" });
res.son(JSON.stringify({ İleti: hata }));
}
}

Bu kod bloğu, İD itibaren url, eşleşen belgeyi siler İD, durum kodunu ve başlıkları gönderir ve isteği kapatır.

Son olarak, içe aktar yönlendirici senin içinde server.js dosyalayın ve arayın yönlendirici fonksiyon, geçiş istek ve res argümanlar olarak:

const yönlendirici = gerekmek("./routes/blogRoutes");

const server = http.createServer((req, res) => {
yönlendirici (gereksinim, res);
});

Bu, sunucunuzun istekleri uygun şekilde engellemesini ve işlemesini sağlar.

Tamamlanan projeyi burada bulabilirsiniz GitHub deposu.

Node.js Çerçevesi Kullanma

Elle bir web API oluşturmak mümkün olsa da, bu zor bir iş olabilir. Çok sayıda uç vakayı ele aldığınızdan ve kodunuzun hatasız olduğundan emin olmanız gerekir.

Yıllar geçtikçe geliştiriciler, bunu çok daha kolay hale getirmek için ExpressJS, NestJS, Fastify vb. gibi çerçeveler oluşturdular.