Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从作为windows服务运行的Nodejs调用函数

如何从作为windows服务运行的Nodejs调用函数
EN

Stack Overflow用户
提问于 2020-04-09 04:52:48
回答 2查看 603关注 0票数 4

我已经使用node-windows包从nodeJs应用程序创建了windows服务。下面是我的代码。

Main.js

代码语言:javascript
运行
AI代码解释
复制
var Service = require('node-windows').Service;

// Create a new service object
var svc = new Service({
  name:'SNMPCollector',
  description: 'SNMP collector',
  script: './app.js',
  nodeOptions: [
    '--harmony',
    '--max_old_space_size=4096'
  ]
  //, workingDirectory: '...'
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

svc.install();

/* svc.uninstall(); */

App.js

代码语言:javascript
运行
AI代码解释
复制
const { workerData, parentPort, isMainThread, Worker } = require('worker_threads')


var NodesList = ["xxxxxxx", "xxxxxxx"]

module.exports.run = function (Nodes) {
  if (isMainThread) {
    while (Nodes.length > 0) {

    // my logic

      })
    }
  }
}

现在,当我运行main.js时,它会创建一个services.msc服务,并且我可以看到该服务正在windows中运行

但是,我如何从外部应用程序调用运行服务内部的run()方法呢?我找不到任何解决方案,任何帮助都是最好的。

EN

回答 2

Stack Overflow用户

发布于 2020-04-22 21:26:57

您可以考虑简单地在需要的地方导入run函数并在其中运行它,这样就不需要windows服务或main.js了-这假设“任何外部应用程序”都是Node应用程序。

在您的其他应用程序中,您可以执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
const app = require('<path to App.js>');
app.run(someNodes)

为了获得更广泛的使用,或者如果您确实需要将其作为服务运行,您可以使用调用run函数的端点在App.js中启动express (或另一个you服务器)。然后,从其他任何地方,您都需要对该端点进行http调用。

App.js

代码语言:javascript
运行
AI代码解释
复制
const express = require('express')
const bodyParser = require('body-parser')
const { workerData, parentPort, isMainThread, Worker } = require('worker_threads')
const app = express()
const port = 3000

var NodesList = ["xxxxxxx", "xxxxxxx"]

const run = function (Nodes) {
  if (isMainThread) {
    while (Nodes.length > 0) {

    // my logic

      })
    }
  }
}

app.use(bodyParser.json())

app.post('/', (req, res) => res.send(run(req.body)))

app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))

(基于express -https://expressjs.com/en/starter/hello-world.html的示例)

您需要从App.js目录安装express和body-parser:$ npm install --save express body-parser

在其他应用程序中,您将需要使用POST请求调用端点http://localhost:3000,并将Nodes作为JSON数组。

票数 0
EN

Stack Overflow用户

发布于 2020-04-24 18:59:48

您可以像其他答案提到的那样在端口上公开它,但您需要确保不会根据运行环境的不同而更广泛地公开它。关于确保端口被锁定,here有一个很好的答案。

作为在端口上公开它的替代方法,您可以通过在任何其他应用程序中运行该命令来简单地调用该函数:

代码语言:javascript
运行
AI代码解释
复制
node -e 'require("/somePathToYourJS/app").run()'

一个令人担忧的问题是,app.js现在将以调用应用程序拥有的任何权限运行。尽管这个问题可以通过运行runas来解决。更多细节here。但下面是一个例子:

代码语言:javascript
运行
AI代码解释
复制
runas /user:domainname\username "node -e 'require(^"/somePathToYourJS/app^").run()'"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61114221

复制
相关文章
在文件每一行开头增加字符串
首先,使用vim 打开某txt文件,输入冒号,并输入%s/^/,之后输入要添加的字符串即可
DoubleV
2022/03/25
1.2K0
js 2个空数组相加会得到一个空字符串
虽然是一个很简单的题目,但是答案区的大佬们总能给出各种奇奇怪怪的回答,其中就有一个是这样回答的:
IT工作者
2022/05/13
1.1K0
python 字符串开头结尾匹配
filename = 'spam.txt' filename.endswith('.txt') True filename.startswith('file:') False url = 'http://www.python.org' url.startswith('http:') True 或者正则 import re url = 'http://www.python.org' re.match('http:|https:|ftp:', url) <_sre.SRE_Mat
用户5760343
2022/01/10
1.7K0
为什么浏览器的用户代理字符串以 Mozilla 开头?
为什么浏览器的用户代理字符串(user-agent string)以 Mozilla 开头? 最早流行的浏览器是 NCSA Mosaic,它称自己为 NCSA_Mosaic/2.0 (Windows
前端教程
2018/03/29
1.4K0
为什么浏览器的用户代理字符串以 Mozilla 开头?
python字符串匹配开头_对python 匹配字符串开头和结尾的方法详解
1、你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme 等等。检 查 字 符 串 开 头 或 结 尾 的 一 个 简 单 方 法 是 使 用str.startswith() 或 者 是str.endswith()方法。比如:
全栈程序员站长
2022/09/13
2.9K0
为什么我不建议你用去 “ ! = null " 做判空?
最终,项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢?
用户9239674
2022/01/22
1K0
python 匹配字符串开头和结尾
1.你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme 等等。检 查 字 符 串 开 头 或 结 尾 的 一 个 简 单 方 法 是 使 用str.startswith() 或 者 是str.endswith()方法。比如:
全栈程序员站长
2022/09/16
1.3K0
Python字符串开头或末尾匹配
当你需要通过指定的文本模式去检查字符串的开头或者结尾的时候,比如文件名后缀,URL Scheme等等。
后场技术
2020/09/03
1.8K0
Qml变量名为什么不能大写开头?
大写开头一般都为对象如Item,Rectangle。而小写或下划线开头的则是变量名字或对象实例。如何使用大写开头的变量则会被解释器认为是对象,从而发生错误。 ---- 对象大写开头 例: Item对象 Item { } ---- 变量下划线,小写开头 例: item对象实例,isEnable变量名字 Item { id: item property bool isEnable: true }
Qt君
2019/07/16
1.1K0
解惑 | 为什么我根据时间戳获得的offset为空呢?
最近有一个需求,要查询某一时间戳对应的offset值,于是就想到了使用 ./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --time <timestamp> ,但是我在测试的时候,发现有的时间戳会获取不到offset,是空。但是明明指定的时间戳有上报数据,肯定有对应的 offset 的。于是就谷歌,找到了这篇帖子:
create17
2020/09/24
2.8K0
Python判断字符串是否以字母开头
直接上代码吧 import re rule = re.compile('^[a-zA-z]{1}.*$') str='123' if rule.match(str) is None: print(str+'不以字母开头') else: print(str+'以字母开头') str2='a12' if rule.match(str2) is None: print(str2+'不以字母开头') else: print(str2+'以字母开头')
week
2020/03/12
3K0
为什么阿里禁止 boolean 类型变量使用 is 开头?
平时工作中大家经常使用到 boolean 以及 Boolean 类型的数据,前者是基本数据类型,后者是包装类,为什么不推荐使用 isXXX 来命名呢?到底是用基本类型的数据好呢还是用包装类好呢?
JavaFish
2022/01/17
1.8K0
为什么阿里禁止 boolean 类型变量使用 is 开头?
Dart字符串判空
NullPointerExp是无数java程序员都想消除的问题,OC里,nil对象调方法返回的是nil(这种做法,仁者见仁,智者见智);kotlin和swift通过optional机制,通过编程过程中强化Nullable概念,来避免NPE。
DSoon
2018/12/10
14.7K4
什么?字符串为空?
当字符串为null,undefined,NaN,0,false,""这几个时,if(value)的结果都为false,if(!value)包含了我们常见的空值情况,如果你想要简便的方式,便可以使用它
说故事的五公子
2020/07/21
1.7K0
java 判断字符串是不是以数字开头
目录 1 代码 1 代码 //判断字符串是不是以数字开头 public static boolean isStartWithNumber(String str) { Pattern pattern = Pattern.compile("[0-9]*"); Matcher isNum = pattern.matcher(str.charAt(0)+""); if (!isNum.matches()) { return fa
一写代码就开心
2022/07/09
1.4K0
我曾得到的最佳编程建议
我曾得到的最佳编程建议   这是一个有关于我得到的一些专业性编程建议的故事,以及它如何影响了我的职业生涯。我真心觉得此建议真可谓是字字珠玑,所以我想分享给大家。  建议   还是在1996年,我刚
用户1289394
2018/02/27
7760
我曾得到的最佳编程建议
[781]python去除字符串中开头|结尾|所有字母、数字
参考:https://blog.csdn.net/qq_25792799/article/details/80322889 https://blog.csdn.net/qq_40771567/article/details/86561158 https://www.cnblogs.com/pyse/p/9847812.html http://dy.163.com/v2/article/detail/DMA5CHFN0511RVML.html
周小董
2020/04/08
2.9K0
scrapy框架| 我的第一个Scrapy爬虫
今天咱们就来写一篇简单的、轻松的文章,当然也是我们开始正式去使用Scrapy来写我们的第一个爬虫,我会通过这个爬虫来给大家一一讲解每一句话是啥意思,当然阅读这篇文章之前,我希望大家先去阅读Python|初识scrapy爬虫 ,阅读完后再来看这篇文章。废话不多说了,看下面吧!
Python进击者
2019/06/21
3880
java判断字符串为空
if(s == null ||"".equals(s)); 方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法:
斯文的程序
2019/11/07
2.7K0
【说站】python有哪些is开头的字符串方法
以上就是python is开头的字符串方法,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/24
6410

相似问题

C语言入门

65

尝试使用C语言入门

96

C语言http媒体流入门

11

Windows下JNI和C语言入门

44

新语言入门

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档