在.Net Core 中调用 NodeJs

本贴最后更新于 1729 天前,其中的信息可能已经时异事殊

微软经提供了一个 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 模块中使用,所以就给我们提供了很大的想象空间。

  • .NET
    27 引用 • 6 回帖 • 5 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    138 引用 • 268 回帖 • 218 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...