微软经提供了一个 Microsoft.AspNetCore.NodeServices
的类库可以方便的调用宿主 nodejs,在 asp.netcore 中,已经包含在 app 元包中了,所以我们可以直接使用。
注入 NodeServices
和其他的服务注册一样,在 Startup.cs 的 ConfigureServices
方法中添加服务:
services.AddNodeServices(options =>
{
options.LaunchWithDebugging = false;
options.ProjectPath = "/Users/loogn/scripts";
});
在添加服务的时候可以设置 js 的文件目录,也就是 nodejs 项目的目录。
编写 js 文件
在 porjectPath 所指的目录中添加 hello.js:
module.exports = function (callback, name) {
var msg = 'Hello,' + name;
callback(null, msg);
};
在 controller 中调用
public async Task<IActionResult> Index([FromServices] INodeServices nodeServices)
{
var msg = await nodeServices.InvokeAsync<string>("hello.js", "loogn");
return Content(msg);
}
说明:
在写 js 的时候,第一个参数 callback 用于吧结果返回给 dotnet,callback 的第一个参数是错误信息,第二个参数是返回值,如果错误信息不为 null 的话,dotnet 接收到返回值的时候会抛出异常。
INodeServices 还有几个重载,比如可以使用模块 + 方法名的方式调用,那么 js 就要导出多个方法了:
module.exports.f1=function (callback) {
//f1
};
module.exports.f2=function (callback) {
//f2
};
这里的 node 项目和一般的 node 项目是一样的,可以使用 npm 安装第三方包,然后 require 到自己的 js 模块中使用,所以就给我们提供了很大的想象空间。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于