検索
ホームページバックエンド開発C#.Net チュートリアル.NET Core 開発ログの Edge.js とは何ですか?使い方?

この記事では、.NET Core 開発ログにある Edge.js とは何かについて簡単に説明します。使い方?一定の参考値があるので、困っている友人は参考にしていただければ幸いです。

私は最近、プロジェクトで古いシステムのビジネス ロジックの一部を新しい自動プロセス ツールに統合する必要性に遭遇しました。開発中の自動化ツールは C# 言語を使用していますが、古いシステムのビジネス ロジックは AngularJS を使用してフロントエンドに構築されています。そのため、最初に検討した解決策は 2 つあり、1 つは元の JavaScript コードを C# コードに書き換えて統合する方法、もう 1 つは必要なコードを抽出して Node.js で構築された RESTful API に配置し、それを呼び出して実行する方法です。 C# コードの HttpClient。

しかしその後、Edge.js という興味深いクラス ライブラリを発見したので、別の選択肢がありました。

Edge.js の役割は、Node.js と .NET の 2 つの世界を接続することです。これを通じて、開発者は Node.js プロセスで .NET コードを呼び出したり、.NET プロセスで Node.js コードを呼び出すことができます。

要件に従って、ここでは C# コード、つまり JavaScript コードで Node.js を呼び出す必要があります。

このクラス ライブラリの使用方法を知りたい場合は、公式 Web サイトの例から始めることができます:

class Program
{
    static void Main(string[] args)
    {
        var func = Edge.Func(@"
            return function (data, callback) {
                callback(null, 'Node.js welcomes ' + data);
            }
        ");

        Console.WriteLine(func(".NET").Result);
        Console.Read();
    }
}

まず、Nuget を通じてそのクラス ライブラリを導入する必要があります。 インストール-パッケージ Edge.js

次に、EdgeJs の Edge クラスの静的メソッド Func を使用します。このメソッドは Node.js で使用されるコードに渡す必要があり、JavaScript 関数を返す必要があります。この関数には、外部受信データのパラメーターとコールバック関数のパラメーターがあります。このコールバック関数の最初のパラメータは JavaScript の例外情報であり、2 番目のパラメータは戻り値です。

Edge.Func メソッドは、Func<object>></object> デリゲート オブジェクトを返します。これは、返されたコンテンツを .NET で非同期に処理できることを意味します。

次に、実際のエンジニアリングに近い例を見てみましょう。

次のコードは AngularJS でよく使用されます。現在の計画では、sayHello 関数のロジックを C# コードに組み込み、それを呼び出すことです。

app.controller(&#39;myCtrl&#39;, function($scope) {
    $scope.name = "World";
    $scope.sayHello = function(data) {
        $scope.greeting = &#39;Hello &#39; + $scope.name + &#39; &#39; + data + &#39;!&#39;;
    };
});

解決への最初のステップは、$scope の扱い方を検討することです。これは本質的にオブジェクトであるため、グローバル オブジェクト変数として定義するだけです。

2 番目のステップは、コア コードを Edge の Func メソッド パラメーターに移動することです。

var func = Edge.Func(@"
    var $scope = {};

    $scope.name = &#39;World&#39;;
    $scope.sayHello = function(data) {
        $scope.greeting = &#39;Hello &#39; + $scope.name + &#39; &#39; + data + &#39;!&#39;;
    };
");

3 番目のステップは、return メソッドを追加し、JavaScript コードで発生する可能性のある例外をキャプチャすることです。

var func = Edge.Func(@"
    var $scope = {};

    $scope.name = &#39;World&#39;;
    $scope.sayHello = function(data) {
        $scope.greeting = &#39;Hello &#39; + $scope.name + &#39; &#39; + data + &#39;!&#39;;
    };

    return function (data, callback) {
        var exception = null;
        try {
            $scope.sayHello(data);    
        } catch(err) {
            exception = err;
        }
        callback(exception, $scope.greeting);
    }
");

完全なコードを実行すると、期待どおりの結果が得られます。

class Program
{
    static void Main(string[] args)
    {
        var func = Edge.Func(@"
            var $scope = {};

            $scope.name = &#39;World&#39;;
            $scope.sayHello = function(data) {
                $scope.greeting = &#39;Hello &#39; + $scope.name + &#39; &#39; + data + &#39;!&#39;;
            };

            return function (data, callback) {
                var exception = null;
                try {
                    $scope.sayHello(data);    
                } catch(err) {
                    exception = err;
                }
                callback(exception, $scope.greeting);
            }
        ");

        Console.WriteLine(func(".NET").Result);
        Console.Read();
    }
}

.NET Core 開発ログの Edge.js とは何ですか?使い方?

ただし、上記の .NET コードは、JavaScript で見つかる可能性のある例外を処理できません。たとえば、コードが次の場合に、sayHello 関数に throw 例外ステートメントを追加すると、が実行されると、予期されたエラーが発生します。

$scope.sayHello = function(data) {
    $scope.greeting = &#39;Hello &#39; + $scope.name + &#39; &#39; + data + &#39;!&#39;;
    throw &#39;there is an error!&#39;;
};

.NET Core 開発ログの Edge.js とは何ですか?使い方?

したがって、より良いアプローチは、.NET コードに対応する例外処理を追加することです。

class Program
{
    static void Main(string[] args)
    {
        try
        {
            var func = Edge.Func(@"
                var $scope = {};

                $scope.name = &#39;World&#39;;
                $scope.sayHello = function(data) {
                    $scope.greeting = &#39;Hello &#39; + $scope.name + &#39; &#39; + data + &#39;!&#39;;
                    throw &#39;there is an error!&#39;;
                };

                return function (data, callback) {
                    var exception = null;
                    try {
                        $scope.sayHello(data);    
                    } catch(err) {
                        exception = err;
                    }
                    callback(exception, $scope.greeting);
                }
            ");
            Console.WriteLine(func(".NET").Result);
        }
        catch (Exception ex)
        {
            // 处理异常
        }

        Console.Read();
    }
}

この方法を使用すると、JavaScript コードを直接翻訳するソリューションよりも工数が節約され、言語翻訳プロセス中に発生する可能性のある多くのバグを回避できます。 Node.js Restful API を確立する 2 番目の方法と比較して、追加のサービスをデプロイする作業が少なくなります。したがって、総合的に検討した結果、実際のニーズに非常に適したソリューションとなります。

唯一の残念な点は、Edge.js は現在、Node.js コードを呼び出す .NET コードに関して .NET Core をサポートしていないことです。公式サイトに記載されている近日公開が早く来ることを願っています。
.NET Core 開発ログの Edge.js とは何ですか?使い方?

以上が.NET Core 開発ログの Edge.js とは何ですか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は博客园で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Vercel是什么?怎么部署Node服务?Vercel是什么?怎么部署Node服务?May 07, 2022 pm 09:34 PM

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

node.js gm是什么node.js gm是什么Jul 12, 2022 pm 06:28 PM

gm是基于node.js的图片处理插件,它封装了图片处理工具GraphicsMagick(GM)和ImageMagick(IM),可使用spawn的方式调用。gm插件不是node默认安装的,需执行“npm install gm -S”进行安装才可使用。

怎么使用pkg将Node.js项目打包为可执行文件?怎么使用pkg将Node.js项目打包为可执行文件?Jul 26, 2022 pm 07:33 PM

如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node.js项目打包为可执行文件的方法,希望对大家有所帮助!

分享一个Nodejs web框架:Fastify分享一个Nodejs web框架:FastifyAug 04, 2022 pm 09:23 PM

本篇文章给大家分享一个Nodejs web框架:Fastify,简单介绍一下Fastify支持的特性、Fastify支持的插件以及Fastify的使用方法,希望对大家有所帮助!

node爬取数据实例:聊聊怎么抓取小说章节node爬取数据实例:聊聊怎么抓取小说章节May 02, 2022 am 10:00 AM

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

C#的就业前景如何C#的就业前景如何Oct 19, 2023 am 11:02 AM

无论您是初学者还是有经验的专业人士,掌握C#将为您的职业发展铺平道路。

分享几个.NET开源的AI和LLM相关项目框架分享几个.NET开源的AI和LLM相关项目框架May 06, 2024 pm 04:43 PM

当今人工智能(AI)技术的发展如火如荼,它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享4个.NET开源的AI模型LLM相关的项目框架,希望能为大家提供一些参考。https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一种开源的软件开发工具包(SDK),旨在将大型语言模型(LLM)如OpenAI、Azure

手把手带你使用Node.js和adb开发一个手机备份小工具手把手带你使用Node.js和adb开发一个手机备份小工具Apr 14, 2022 pm 09:06 PM

本篇文章给大家分享一个Node实战,介绍一下使用Node.js和adb怎么开发一个手机备份小工具,希望对大家有所帮助!

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境