简介
Edge.js 是一个在 .NET 和 Node.js 之间进行交互的工具。通过 Edge.js,我们能够在 Node.js 中直接调用 .NET 代码并返回结果。这对于需要在 Node.js 中调用底层 Windows API 或者需要使用 C#/.NET 原生库的场景特别有用。
本教程将向你展示 Edge.js 的基本使用方法和一些示例。
安装
在使用 Edge.js 之前,我们需要先安装它。在命令行中输入以下命令即可:
npm install edge
安装完成后,我们就可以在代码中引入 Edge.js 了。
const edge = require('edge');
基本用法
Edge.js 提供了 edge.func
方法,用于载入 .NET 程序集并创建一个 C# 函数以供 Node.js 调用。例如,我们的 .NET
文件名为 mymodule.cs
,其中有一个 Add
方法,可以计算两个整数的和。
-- -------------------- ---- ------- ----- ------- ------ ----- ------- - ------ ----- ------------ ----------- ------ - --- - - ------------------------- --- - - ------------------------- --- ------ - - - -- ------ ------- - -
我们可以使用 edge.func
方法调用这个方法:
-- -------------------- ---- ------- ----- --- - ----------- ------------- ----------------------- --------- ---------- ----------- ----- --- ----- -- --- -- -- -- ----- ------- -- - -- ----- ----- ---- -------------------- -- -- ---
edge.func
方法的参数有三个:
assemblyFile
:要载入的 .NET 程序集文件路径。typeName
:包含我们要调用的方法的类的完整名称。methodName
:要调用的方法名称。
当我们调用 add
函数时,Node.js 将把 { a: 10, b: 20 }
作为输入传递给 .NET
方法。.NET
方法返回一个整数类型的值 result
,它会作为回调函数中的第二个参数被传递给 console.log
。
异步调用
在 Node.js 中进行异步操作是非常常见的。Edge.js 也提供了异步调用支持,我们需要将 .NET
函数声明为异步方法,并使用 await
来等待异步操作完成。例如,我们在 mymodule.cs
中添加一个支持异步操作的 GetFileContent
方法:
-- -------------------- ---- ------- ------ ----- ------- - ------ ----- ------------ ---------------------- ------ - ------ -------- - ----------------------------- ------ ------- - ----- -------------------------------- ------ -------- - -
然后,我们可以像这样在 Node.js 中调用异步方法:
-- -------------------- ---- ------- ----- -------------- - ----------- ------------- ----------------------- --------- ---------- ----------- ---------------- --- ---------------- ----- ------------------ -- ----- ------- -- - -- ----- ----- ---- -------------------- -- --- ------- -- -------- ---
输入输出类型
在前面的示例代码中,我们使用了 dynamic
类型来表示输入和输出参数。使用 dynamic
类型可以让代码更灵活,但也会带来一些性能上的损失。在 .NET 中,我们可以使用强类型来代替 dynamic
,从而提高代码性能和类型安全性。
以下是一个使用强类型的示例。我们在 mymodule.cs
中声明了一个 Person
类:
public class Person { public string Name { get; set; } public int Age { get; set; } }
然后,我们定义了一个 GetPerson
方法,该方法接受一个 Person
对象作为输入参数,并以同样的方式返回该对象。
public async Task<Person> GetPerson(Person input) { return input; }
在 Node.js 中,我们可以使用 Person
类型来直接传递输入和输出参数。以下是调用示例:
-- -------------------- ---- ------- ----- --------- - ----------- ------------- ----------------------- --------- ---------- ----------- ----------- --- --- ------ - - ----- ------- ---- -- -- ----------------- ----- ------- -- - -- ----- ----- ---- -------------------- -- - ----- ------- ---- -- - ---
处理异常
如果在 .NET 函数中发生异常,Edge.js 默认将抛出一个错误对象。我们可以使用 try/catch
代码块来捕获该异常并处理错误。
例如,在 mymodule.cs
中,我们可以添加一个会引发异常的 Divide
方法:
-- -------------------- ---- ------- ------ ----- --------- -------------- ------ - --- - - ------------------------- --- - - ------------------------- -- -- -- -- - ----- --- ----------------- -- -------- - ------ - - -- -
在 Node.js 中,我们可以使用以下方式来调用 Divide
方法,并处理可能的异常:
-- -------------------- ---- ------- ----- ------ - ----------- ------------- ----------------------- --------- ---------- ----------- -------- --- -------- -- --- -- - -- ----- ------- -- - -- ----- - ------------------------- -- ------ -- ----- ------- - -------------------- ---
总结
在本教程中,我们学习了 Edge.js 的基本使用方法和一些示例。
- 我们可以使用
edge.func
方法来载入 .NET 程序集并创建一个 C# 函数以供 Node.js 调用。 - Edge.js 支持异步操作和强类型输入输出。
- 我们可以使用
try/catch
代码块来捕获可能的异常并处理错误。
这些知识可以帮助我们更好地了解如何使用 Edge.js,在 Node.js 中更方便地调用 .NET 代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645e18f7968c7c53b0081378