如何在.Net Core呼叫NodeJs
阿新 • • 發佈:2018-12-30
概述
目前.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); }
返回情況