Node.js API产生对另一个API

时间:2017-04-02 17:09:24

标签: javascript node.js api

我创建了一个Node.js API。 当调用此API时,我会很快返回调用者。哪个好。

但是现在我还希望API能够调用或启动一个不同的API或函数,或者它自己运行的东西。有点像用child.unref()调用子进程。事实上,我会使用child.spawn(),但我不知道如何让spawn()调用另一个API。 也许这就是我的回答?

在这个其他过程中,我不在乎它是否崩溃或完成而没有错误。  所以它不需要附加任何东西。但是,如果它仍然附加到Node.js控制台,那么锦上添花。

我还在考虑如何识别&如果产卵以某种方式陷入运行很长时间该怎么办。但是准备好跨过这一部分。

您对我可以做些什么的想法?

3 个答案:

答案 0 :(得分:0)

您需要准确指定其他产生的东西应该做什么。如果它使用Node.js调用HTTP API,则不应启动新进程来执行此操作。构建节点是为了异步运行HTTP请求。

正常模式,如果你真的需要在不同的进程中发生一些事情,就是使用类似消息队列,集群模块或工作人员将监视的进程之间的其他消息传递/队列,并且工作者是通常设置为以这种方式处理某些特定任务或任务集。在收到HTTP请求后生成另一个进程是非常罕见的,因为启动新进程相当重,如果不小心可能会耗尽所有服务器资源,并且由于Node的异步功能通常不是必需的特别是对于主要涉及IO的事情。

答案 1 :(得分:0)

这是我前一段时间构建的测试API。注意我甚至将一个值作为参数传递给脚本。

router.put('/test', function (req, res, next) {
    var u = req.body.u;
    var cp = require('child_process');
    var c = cp.spawn('node', ['yourtest.js',  '"' + u + '"'], { detach: true });
    c.unref();
    res.sendStatus(200);

});

yourtest.js脚本可以是您想要的任何内容。但是我想如果我想将脚本视为node.js控制台桌面应用,我会更喜欢学习更多知识。 FIRST 通过从控制台的命令行yourtest.js 手动运行/测试脚本,让您的node yourstest.js yourparamtervalue脚本无误地运行 将其整合到child.spawn()

var u = process.argv[2];
console.log('f2u', u);

function f1() {
    console.log('f1-hello');
}

function f2() {
    console.log('f2-hello');
}
setTimeout(f2, 3000); // wait 3 second before execution f2().  I do this just for troubleshooting.  You can watch node.exe open and then close in TaskManager if node.exe is running long enough.

f1();

答案 2 :(得分:-1)

我想我可以child.spawn('node', [somescript]) 你怎么看? 我必须探索我的云主机是否也允许这样做。