
Asp.Net Core-Node.js Bağlantısı
Asp.Net Core JavaScript Services serisine kaldığımız yerden devam ediyoruz. Sırada, giriş makalesinde de değindiğim NPM paketlerinin .Net içerisinden çağırılmasında. Asp.Net Core JavaScript Services ile birlikte iyi bir .Net-Node.js bağlantısına sahip olduk. Bu bağlantı sayesinde herhangi bir Node.js kodunu oldukça kolay şekilde .Net içerisinde çağırabilecek esnekliğe sahip olduk.
Bu entegrasyonu anlatmanın en kolay yolu örnek bir kod üzerinden gitmek olacaktır. Bu sebeple boş bir Asp.Net Core uygulaması oluşturalım;

Ardından da paketlerimizi yükleyelim;

Asp.Net Core için Node.js hizmetlerini kullanabilmek için öncelikle project.json dosyasında yer alan bağımlılıklar arasına aşağıdaki şekilde Microsoft.AspNetCore.NodeServices’i de eklemeliyiz;
"Microsoft.AspNetCore.NodeServices": "1.0.0-*"

Bağımlılığı ekledikten sonra ilgili bileşenlerin yüklenebilmesi için komut satırından yeniden aşağıdaki komutu çalıştırmalısınız;
dotnet restore
Projemizi Visual Studio Code ile yeniden açtıktan sonra Startup.cs dosyasında yer alan ConfigureServices fonksiyonuna aşağıdaki şekilde Node.js hizmetlerinin eklenmesini sağlayabiliriz;
public void ConfigureServices(IServiceCollection services) { services.AddNodeServices(); }
Bu noktada Visual Studio Code, AddNodeServices fonksiyonunu bulamadığına dair bir hata mesajı verecektir. Bu hatayı düzeltmek için aşağıdaki şekilde using cümleciğini eklemeniz gerekli;
using Microsoft.AspNetCore.NodeServices;

Bu adımlar ardından Asp.Net Core’un Dependency Injection sistemi NodeServices’i tanıyacak ve gerektiğinde bu bağımlılığı kodunuza enjekte edebilecektir. Dolayısıyla herhangi bir MVC action’ı içerisinden INodeServices arayüzünün bir örneğine ulaşabilirsiniz.
Örnek olması adına aşağıdaki şekilde basit bir string ifadeyi dönen bir Node.js modülü hazırlayarak denemelerimizi yapabiliriz;
module.exports = function (callback) { var mesaj = "Enterprisecoding, Node.js Modulunden Merhaba!"; callback(/* hata*/ null, mesaj); };
Bu kodu uygulamamızın ana klasöründe karsilamaMesaji.js adlı bir dosya içerisine kaydedelim. Daha sonra da başta oluşturduğumuz boş web uygulamamızın Startup.cs dosyası içerisindeki Configure fonksiyonunda aşağıdaki şekilde değişiklik yapalım;
INodeServices nodeServices = app.ApplicationServices.GetService<INodeServices>(); var sonuc = await nodeServices.InvokeAsync<string>("./karsilamaMesaji"); await context.Response.WriteAsync("Node.js Modulunden gelen icerik : " + sonuc);

Uygulamamızı çalıştırdığımızda bize aşağıdaki çıktıyı verecektir;

Bu örneğimiz herhangi bir parametre göndermiyor olmasına karşın, isterseniz Node.js modülünüze parametre ile değer gönderebilmeniz de mümkün. Burada dikkat etmeniz gereken en önemli nokta, parametre türlerinin json’a serilize edilebilir olmasıdır. Node.js modülünüzde bir hata alınması durumunda InvokeAsync fonksiyonu da bu hatayı fırlatacaktır.
Örneğimize dikkat edecek olursanız Asp.Net Core Dependency Injection makanizmasına doğrudan bir çağrı yaparak INodeServices arayüzünün bir örneğini aldık. Örneği basit tutmak adına tercih ettiğim bu yöntem yerine, gerçek hayatta aşağıdaki kullanıma benzer bir kullanım ile action fonksiyonlarınızda bu arayüze ait bir örneği kolaylıkla edinebilirsiniz;
public async Task<IActionResult> HerhangiBirAksiyon([FromServices] INodeServices nodeServices) { var sonuc= await nodeServices.InvokeAsync<int>("./karsilamaMesaji"); return Content("Node.js Modulunden gelen icerik : " + sonuc); }