筆者最近遇到了要在專案中執行 JavaScript 程式碼的需求,特此紀錄一下。
先使用 NuGet 安裝 Jering.Javascript.NodeJS 套件,或是使用 .NET CLI 執行以下指令安裝:
此套件會使用本機中的 Node.js 執行,所以需要先安裝 Node.js
C# 中的程式碼:
上面的程式碼是去執行 D:\\my.js 檔案,這裡的示範檔案內容為:
如果沒有使用 module.exports 會拋出例外:
註: 在筆者的測試中,如果沒有 async 則 C# 程式碼會一直卡在讀取回應
參考資料:
GitHub - Owner avatar Javascript.NodeJS
先使用 NuGet 安裝 Jering.Javascript.NodeJS 套件,或是使用 .NET CLI 執行以下指令安裝:
dotnet add package Jering.Javascript.NodeJS
此套件會使用本機中的 Node.js 執行,所以需要先安裝 Node.js
C# 中的程式碼:
using Jering.Javascript.NodeJS;
using Microsoft.Extensions.DependencyInjection;
try
{
var serviceProvider = new ServiceCollection()
.AddNodeJS()
.BuildServiceProvider();
var nodeJsService = serviceProvider.GetRequiredService<INodeJSService>();
string scriptPath = "D:\\my.js";
// 透過 Node.js 執行並取得回傳結果
var result = await nodeJsService.InvokeFromFileAsync<string>(scriptPath);
Console.WriteLine("回傳結果: " + result);
}
catch (Exception e)
{
Console.WriteLine($"發生錯誤: {e.Message}");
}
上面的程式碼是去執行 D:\\my.js 檔案,這裡的示範檔案內容為:
module.exports = async function () {
return "這是來自 my.js 的回傳結果";
};
如果沒有使用 module.exports 會拋出例外:
Jering.Javascript.NodeJS.InvocationException: The module "D:\my.js" does not export a function.
註: 在筆者的測試中,如果沒有 async 則 C# 程式碼會一直卡在讀取回應
參考資料:
GitHub - Owner avatar Javascript.NodeJS
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com