在低代码产品中为了扩展功能,我们在业务编排中会扩展代码块的功能,允许用户直接在界面中进行代码(Node.js、 Python)的编写,来实现取数或者赋值的一些功能。本文简单介绍下在 dotNET 5 中怎么样进行 Node.js 的调用以及怎样部署到 CentOS 和 Docker 容器中。

环境

  • dotNET :5

  • Node.js:14.17.4

  • CentOS:7.6

  • Docker:19.03.13

dotNET 5 中的代码实现

1、在 VS 中创建 WebAPI 示例项目 nodejs-demo 项目,目标框架选择 .NET 5.0。

2、在项目中引入 NuGet 包:Microsoft.AspNetCore.NodeServices ,这里我使用的是 5.0 的预览版本。

3、修改 Startup 类,在 ConfigureServices 方法中添加下面代码:

services.AddNodeServices();

4、在项目的根目录中创建一个名为 hello.js 的脚本文件,文件的属性中的「复制到输出目录」设置为「始终复制」,文件的内容如下:

module.exports = function (callback, name) {var msg = 'Hello,' + name;callback(null, msg);
};

5、编写一个 API 接口方法:

[HttpGet]
public async Task<IActionResult> Get([FromServices] INodeServices nodeServices)
{var result = await nodeServices.InvokeAsync<string>("hello.js", "oec2003");return Ok(result);
}

6、如果正常运行,结果如下:

部署到 CentOS 中

1、在 Node.js 的中文官网 (http://nodejs.cn/download/current/) 下载 Linux 二进制文件 (x64) 的安装包;

2、将下载的安装包 node-v14.17.4-linux-x64.tar.xz 复制到 CentOS 系统的 root 目录中;

3、执行命令 tar -xvf node-v14.17.4-linux-x64.tar.xz 解压安装文件;

4、执行命令 mv node-v14.17.4-linux-x64 nodejs 将解压后的文件夹命名为 nodejs;

5、执行命令 cp -r nodejs /usr/local 将 nodejs 目录复制到 /usr/local ;

6、执行下面的命令进行软链接:

ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/nodejs/bin/node /usr/local/bin/

7、输入 node -v 进行检查,如果有版本号出现说明安装成功;

8、执行下面的命令进行 dotNET 5 安装:

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-5.0

9、将示例程序 nodejs-demo 发布到 pub-nodejs 目录,将发布后的目录拷贝到 CentOS 服务器的 root 目录中;

10、进入到 /root/pub-nodejs 目录,执行命令 dotnet nodejs-demo.dll 运行。

在 Docker 容器中部署

1、在 /root/pub-nodejs 目录中创建 Dockerfile 文件,内容如下:

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim
COPY . /app
WORKDIR /app
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "nodejs-demo.dll"]

2、进入到 /root/pub-nodejs 目录中执行命令 docker build -t nodejs-demo . 进行镜像的构建;

3、执行命令 docker run -d -p 5000:5000 --name nodejs-demo nodejs-demo 进行容器的创建,创建成功后,还不能正常运行,因为现在容器中还没有安装 Node.js 环境;

4、容器中安装 Node.js 的方式和在 CentOS 中相同,执行命令 docker cp nodejs 容器id:/usr/local 将 Node.js 的包复制到容器中的 /usr/local 目录中;

5、执行 docker exec -it 容器id bash 进入到容器中;

6、执行下面的命令进行软链接:

ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/nodejs/bin/node /usr/local/bin/

7、在网页中或用 Postman 进行接口的访问进行测试;

构建包含 Node 运行环境的基础镜像

1、通过构建镜像是使用 Dockerfile,下面使用另一种方式来构建;

2、因为在容器中部署后,容器中已经有 Node 环境了,执行下面的命令就可以将运行的容器构建成一个新的镜像:

docker commit -a "oec2003" -m "add nodejs" 容器id aspnet-nodejs:5.0

3、执行完成后,使用 docker images 命令可以看到新创建的 aspnet-nodejs:5.0

4、再进行镜像构建时就可以将 Dockerfile 文件内容修改如下:

FROM aspnet-nodejs:5.0
COPY . /app
WORKDIR /app
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "nodejs-demo.dll"]

5、这样构建出来的镜像中就包含了 Node 环境。

dotNet 5 中执行 Node.js相关推荐

  1. 在 Chrome 开发者工具中调试 node.js

    命令行工具 devtool ,它可以在 Chrome 的开发者工具中运行 Node.js 程序. 下面的记录显示了在一个 HTTP 服务器中设置断点的情况. 该工具基于 Electron 将 Node ...

  2. 在Maven+Spring项目中使用Node.js的Gulp进行前端自动化构建

    摘要: 在Maven+Spring项目中使用Node.js的Gulp进行前端自动化构建 刚开始打算进行前后端分离开发,后来发现在使用JSP或者Freemarker做动态页面时,想发挥这些自动化构建工具 ...

  3. 如何在 Windows 10 中搭建 Node.js 环境?

    2019独角兽企业重金招聘Python工程师标准>>> [编者按]本文作者为 Szabolcs Kurdi,主要通过生动的实例介绍如何在 Windows 10 中搭建 Node.js ...

  4. 来自Android客户端什么意思,如何通过回调函数中的Node.js来自Android客户端

    我想从插座Android客户端将数据发送到服务器的Node.js .. 在服务器端做了什么香港专业教育学院:如何通过回调函数中的Node.js来自Android客户端 socket.on('new u ...

  5. 虚拟机下的CentOS环境中安装Node.js

    http://archive.cnblogs.com/a/2159046/ 本来这个并没有什么好写的,为什么,网上到处都是.不过在安装的时候确实遇到了很多问题,很有必要记录一下. 先安装gcc-c++ ...

  6. linux中安装node.js及搭建vue详细步骤

    1.官网下载Node.js的安装包 https://nodejs.org/zh-cn/download/ 2.将压缩包上传到服务器上 3.解压为tar包 xz -d node-v16.14.0-lin ...

  7. linux中安装node.js,配置全局环境

    下载node.js文件 到node.js的官网去下载整个包,这个官网百度一搜索就能找到.就不粘贴上来了. 在配置node.js环境 讲下载完成的node的包放到自己先放入的位置 然后到/etc/pro ...

  8. html怎么调用node.js,javascript – 在HTML中使用Node.js模块

    我有以下Node.js项目(这是我的问题的最小工作示例): module1.js: module.exports = function() { return "this is module1 ...

  9. android node编码,android studio中的Node.js

    我正在浏览Node.js示例 https://code.janeasystems.com/nodejs-mobile/getting-started-android 我不断地出现错误"err ...

最新文章

  1. 的安装配置_JDK安装与配置
  2. django框架之自定义重定向页面
  3. Eclipse中server启动超时的解决方法
  4. 1-36随机生成6个不重复的数
  5. Python02 标准输入输出、数据类型、变量、随记数的生成、turtle模块详解
  6. Spark入门(十六)之分组求TOP N最小值
  7. 程序员笔试面试后上机_hcie面试有哪些要注意的事项?
  8. linux查看jdk详细版本号,Linux中查看jdk版本
  9. 3D引擎多线程:渲染与逻辑分离
  10. Q80:平坦着色(Flat Shading)和平滑着色(Smooth Shading)——“Q79:怎么用三角形网格(Triangle Mesh)细分曲面”(补充)
  11. 软件项目文档及其必要性
  12. Jpa 注解详解 映射详解 一对多 多对一
  13. 制作PPT怎样设计图片才有观赏性
  14. 计算机科学教学指导委员会,教育部高等学校计算机专业教学指导委员会委员 徐久成教授...
  15. Pytorch 学习(2):神经网络及训练一个分类器(cifar10_tutorial的网络结构图)
  16. 分析智联招聘的API接口,进行数据爬取
  17. 技术圈的【多肉小达人】,一篇文章你就能做到
  18. Linux中隐藏文件与文件夹
  19. py:os模块:getcwd等处理文件和目录的方法
  20. 喜讯丨zCloud 首批通过中国信通院数据库管理平台基础能力专项评测

热门文章

  1. HtmlGenericControl
  2. html 跳转到本页面指定位置
  3. (待完成)qbxt2019.05 总结2 - 数位DP
  4. 下拉刷新:继承listView控件
  5. 数据可视化(9)--数据可视化6步法
  6. ArrayBlockingQueue, LinkedBlockingQueue, ConcurrentLinkedQueue, RingBuffer
  7. 一款不错的编程字体Source Code Pro
  8. html标签属性和标签事件,HTML参考手册( 标签、属性和事件)
  9. linux下设备或资源忙,linux删除文件目录 目录设备或资源忙怎么办
  10. PrincetonAlgorithm I - Assignment2 Deques and Randomized Queues