1. 程式人生 > 實用技巧 >NET CORE通過NodeService呼叫js

NET CORE通過NodeService呼叫js

在 .NET Framework 時,我們可以通過V8.NET等元件來執行 JavaScript,不過目前我看了好幾個開源元件包括V8.NET都還不支援 .NET Core ,我們如何在 .NET Core 中執行 JavaScript 呢,答案是使用 NodeServices。關於為何有在 .NET Core 中執行 JavaScript 這種需求,比較特殊,舉個栗子:當你做模擬登入時,目標網站可能採用一些加密演算法來計算特殊的值,如果你要完全模擬,那麼除了用C#翻譯這個演算法還有個辦法就是直接將這段加密演算法JS程式碼拷貝使用C#來執行。還舉個栗子:SPA服務端渲染,比如Angular、 React等。


NodeServices 是一個 ASP.NET Core 中介軟體,將它新增到 ASP.NET Core 管道中,該中介軟體呼叫Node在執行時執行JavaScript。 這意味著如果使用 NodeServices,你必須在主機上安裝Node。

安裝

NodeServices 的開源地址為:https://github.com/aspnet/JavaScriptServices
在 Nuget 釋出的包名為:Microsoft.AspNetCore.NodeServices

1.通過Nuget安裝包 Microsoft.AspNetCore.NodeServices
2.在Startup.cs檔案的ConfigureServices方法中引用它

public void ConfigureServices(IServiceCollection services)
{
    services.AddNodeServices();
}

現在,我們可以使用介面INodeServices來呼叫Js程式碼,它的原始碼如下:

public interface INodeServices : IDisposable
{
    Task<T> InvokeAsync<T>(string moduleName, params object[] args);
    Task<T> InvokeAsync<T>(CancellationToken cancellationToken, string moduleName, params object[] args);

    Task<T> InvokeExportAsync<T>(string moduleName, string exportedFunctionName, params object[] args);
    Task<T> InvokeExportAsync<T>(CancellationToken cancellationToken, string moduleName, string      exportedFunctionName, params object[] args);
}

使用

  1. 新建要呼叫的js檔案,儲存到專案站點目錄下,非wwwroot

注意事項:方法內必須有callback引數,這樣我nodeService才能取到返回結果。

2.設定js為總是複製

3.呼叫js

方法說明

InvokeAsync適用於 module.exports = function(){} 的js檔案呼叫
InvokeExportAsync適用於 module.exports = { demo:function(){} } 的js檔案呼叫


!如果伺服器無法執行,安裝NodeJs環境