Mat*_*att 1 javascript c# module node.js asp.net-web-api
我们的主要后端服务器是一个 .net 5 Web API 项目。我需要将一些 javascript 模块和 javascript 代码集成到我们的功能中。我想节省将这些模块全部重写为 C# 以便从我们的代码访问的时间。是否有任何包或方法可以完成此任务,或者我最好运行一个单独的节点服务器来实现此功能?
Jering.Javascript.NodeJS使您能够从 C# 调用 Node.js 模块中的 javascript。借助此功能,您可以在 C# 项目中使用 Node.js 脚本/模块。支持:回调、Promise 和异步/等待。通过文件路径、字符串或流获取js脚本。您可以运行保留在内存中的 Node.js 应用程序的单个全局实例,也可以为每个调用创建一个新实例。请参阅从文件调用 Javascript的示例。
通过包管理器或.Net CLI 安装
Install-Package Jering.Javascript.NodeJS
#or
dotnet add package Jering.Javascript.NodeJS
Run Code Online (Sandbox Code Playgroud)
一些模块.js
module.exports = {
doSomething: (callback, message) => callback(null, { message: message + '!' }),
doSomethingElse: (callback, message) => callback(null, { message: message + '.' })
}
Run Code Online (Sandbox Code Playgroud)
在您的 .Net 应用程序中
var services = new ServiceCollection();
services.AddNodeJS();
ServiceProvider serviceProvider = services.BuildServiceProvider();
INodeJSService nodeJSService = serviceProvider.GetRequiredService<INodeJSService>();
public class Result {
public string? Message { get; set; }
}
Result? result = await nodeJSService.InvokeFromFileAsync<Result>("some-module.js", "doSomething", args: new[] { "success" });
Assert.Equal("success!", result?.Message);
Run Code Online (Sandbox Code Playgroud)
这是一个基本的实现示例。您应该查看Jering.Javascript.NodeJS文档以获取安装、配置和使用的完整示例。
围绕 JS 脚本创建 HTTP Rest 或 WebSocket 包装器,并从 .Net 应用程序调用它们。在您的 .Net 应用程序中,使用HttpClient 类发出 HTTP 请求。然后在 Node.js 中使用路由来包装脚本以访问各种方法。就像是:
const express = require('express');
const app = express();
const port = 3000;
app.get('/some/endpoint', (req, res) => {
// Gets executed when the URL http://localhost:3000/some/endpoint
// Do your thing here
// Return it back to .Net with:
res.send(JSON.stringify({some_response: "Hello There"}))
});
// Start the http server
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
});
Run Code Online (Sandbox Code Playgroud)
使用 HTTP Rest/WebSocket 选项将要求您在尝试从 .Net 调用端点之前已经运行 Node.js 应用程序(并保持其运行)。
以下是最流行的 .Net 模块,它们允许您在 C# .Net 服务中运行标准 Javascript 代码。但是,它们都使用V8 引擎执行 JS 脚本,并且不适用于 Node.js 特定方法(例如 FileSystem)。这些也不允许使用 require() 或 Import。如果您的 Javascript 需求非常有限并且将来不会添加额外的 JS 函数,这可能是一个不错的选择。
对于非常小的脚本来说,此选项快速且简单,但更新和维护 JS 脚本将是最困难的。
| 归档时间: |
|
| 查看次数: |
1854 次 |
| 最近记录: |