zoukankan      html  css  js  c++  java
  • 如何在.Net Core调用NodeJs


    概述

    目前.net core正处于飞速的成长期,虽然前途光明不容置疑,但是就生态而言还是比不上其他一些语种的大环境,那如果能够在.net core下调用其他语种的库加以利用那就能更好的发挥我们手头的.net core 而不至于因为库短缺而尴尬

    NodeJs出生名门,依靠其异步IO广泛用于I/O密集的场景,而且世界上的javascript开发者也是多如牛毛!自然Nodejs的盛起也给他们的代码生活带来了前所未有的体验,同样JS的库也是五花八门一度占据了github的排行榜。

    如果.net core能利用 nodejs的庞大生态库是不是很nice?

    Microsoft.AspNetCore.NodeServices库

    其实微软爸爸提供了Microsoft.AspNetCore.NodeServices这个库,专门用来调用nodejs服务

    要使用NodeJs服务,首先需要Microsoft.AspNetCore.NodeServices在项目文件中包含包的引用。您可以使用dotnet add package Microsoft.AspNetCore.NodeServices命令执行此操作。

    然后,您需要将Node Services中间件利用ConfigureServices()添加到请求管道。

    现在,您可以利用INodeServices在应用程序中获取实例。并利用它调用在Node环境中运行的JavaScript的API。您可以使用FromServicesattribute在您的action方法中获取`INodeServices'的实例

    实例

    这里我贴一个实例供参考

    新建aspnet core站点

    利用dotnet command建立站点

    dotnet new mvc

    添加nuget包

    dotnet add package Microsoft.AspNetCore.NodeServices

    建立node环境,此处示例用于扫描wifi环境

    在站点根目录下利用npm建立环境

    npm init -y
    npm install node-wifi --save-dev

    建立nodejs的程序文件 index.js

    复制代码
    var wifi = require("node-wifi");
    
    module.exports = function(callback) {
        wifi.init({
            iface: null // network interface, choose a random wifi interface if set to null
        });
        // Scan networks
        wifi.scan(
        ).then(function (networks) { callback(null,networks)});
    };
    复制代码

    设置js文件为始终复制

    注入配置

    复制代码
       public void ConfigureServices(IServiceCollection services)
            {
                services.Configure<CookiePolicyOptions>(options =>
                {
                    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                    options.CheckConsentNeeded = context => true;
                    options.MinimumSameSitePolicy = SameSiteMode.None;
                });
                services.AddNodeServices();
    
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            }
    复制代码

    在控制器-Action处调用

    public async Task<IActionResult> Wifi([FromServices] INodeServices nodeServices)
    {
    var result=await nodeServices.InvokeAsync<dynamic>("Index.js");
    return new JsonResult(result);
    }
    返回情况

  • 相关阅读:
    vue+sass 下sass不能运行问题
    Servlet3.0的新特性
    Servlet监听器
    Servlet过滤器
    会话跟踪
    Servlet的应用
    Servlet概述
    《南怀瑾讲述99个人生道理》——刘清海编著
    Web应用程序简介
    JDBC学习总结(五)
  • 原文地址:https://www.cnblogs.com/webenh/p/11213664.html
Copyright © 2011-2022 走看看