1. 程式人生 > >如何在.Net Core呼叫NodeJs

如何在.Net Core呼叫NodeJs


概述

目前.net core正處於飛速的成長期,雖然前途光明不容置疑,但是就生態而言還是比不上其他一些語種的大環境,那如果能夠在.net core下呼叫其他語種的庫加以利用那就能更好的發揮我們手頭的.net core 而不至於因為庫短缺而尷尬

NodeJs出生名門,依靠其非同步IO廣泛用於I/O密集的場景,而且世界上的javascript開發者也是多如牛毛!自然Nodejs的盛起也給他們的程式碼生活帶來了前所未有的體驗,同樣JS的庫也是五花八門一度佔據了github的排行榜。

如果.net core能利用 nodejs的龐大生態庫是不是很nice?

Microsoft.AspNetCore.NodeServices庫

其實微軟爸爸提供了Microsoft.AspNetCore.NodeServices這個庫,專門用來呼叫nodejs服務

要使用NodeJs服務,首先需要Microsoft.AspNetCore.NodeServices在專案檔案中包含包的引用。您可以使用dotnet add package Microsoft.AspNetCore.NodeServices命令執行此操作。

然後,您需要將Node Services中介軟體利用ConfigureServices()新增到請求管道。

現在,您可以利用INodeServices在應用程式中獲取例項。並利用它呼叫在Node環境中執行的JavaScript的API。您可以使用FromServicesattribute在您的action方法中獲取`INodeServices'的例項

例項

這裡我貼一個例項供參考

新建aspnet core站點

利用dotnet command建立站點

dotnet new mvc

 

新增nuget包

dotnet add package Microsoft.AspNetCore.NodeServices

 

建立node環境,此處示例用於掃描wifi環境

在站點根目錄下利用npm建立環境

npm init -y
npm install node-wifi --save-dev

 

建立nodejs的程式檔案 index.js

var wifi = require("node-wifi");

module.exports = function(callback) {
    wifi.init({
        iface: null // network interface, choose a random wifi interface if set to null
    });
    // Scan networks
    wifi.scan(
    ).then(function (networks) { callback(null,networks)});
};

 

設定js檔案為始終複製

注入配置

   public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
            services.AddNodeServices();

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

 

在控制器-Action處呼叫

   public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
            services.AddNodeServices();

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

 

返回情況