gpt4 book ai didi

arangodb - 如何在arangodb的后台任务中调用外部函数

转载 作者:行者123 更新时间:2023-12-01 09:54:32 25 4
gpt4 key购买 nike

我有一个完全正常的功能,我想每 30 分钟从后台任务中调用一次。但它不会将错误称为“未定义”。

应用程序.js

function hourly() { require("console"); console.log('I am running');}

controller.get('/testOnce', function(req, res) {
var tasks = require("org/arangodb/tasks");

tasks.register({
id : "Test",
name : "Testing background task",
period : 5,
command : "hourly()"
});
});

我尝试在一个单独的 js 中定义 hourly,然后用'require'调用它但是这个抛出无法定位模块'myjob'

我的作业.js

function hourly() { require("console"); console.log('我正在运行');

应用程序.js

controller.get('/testOnce', function(req, res) {
var tasks = require("org/arangodb/tasks");

tasks.register({
id : "Test",
name : "Testing background task",
period : 5,
command : "var job = require('myjob');"
});

});

最佳答案

command 属性的内容不能引用在其他范围内定义的变量。例如,在 app.js 变体中,您使用了一个名为 hourly 的变量,该变量在执行命令时可能不再存在。

在只记录一些东西的简单情况下,如果 app.js 变体的 command 参数更改为以下内容(不需要任何变量):

var tasks = require("org/arangodb/tasks");
tasks.register({
period : 5,
command : "require('console').log('I am running from inline command');"
});

在单独的文件(名为 myjob.js)中定义作业函数的变体可以通过导出该模块使该函数可用来使其工作:

function hourly() { 
require("console").log('I am running from myjob.js');
}

exports.hourly = hourly;

这是因为 require() 只会公开模块导出的内容。在上述情况下,模块将公开一个名为 hourly 的函数,现在可以从后台任务调用该函数,如下所示:

var tasks = require("org/arangodb/tasks");
tasks.register({
period : 5,
command : "require('myjob').hourly();"
});

请注意,为了使其正常工作,文件 myjob.js 需要位于模块搜索路径中。 IIRC 默认为 js/node。另请注意,此目录已包含捆绑模块,并且可能会在 ArangoDB 更新时更改。

如果要从 Foxx 路由中执行常规命令,那么使用 Foxx 队列也可能是一种选择,因为它们应该允许将带有作业函数的脚本放入应用程序目录中。不过,我还没有尝试过。

关于arangodb - 如何在arangodb的后台任务中调用外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31031613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com