Node.js 队列使用者中的Nestjs Shell命令

Node.js 队列使用者中的Nestjs Shell命令,node.js,typescript,nestjs,Node.js,Typescript,Nestjs,我想在nestjs队列使用者中使用shell命令,如git clone。但是当我用shelljs执行命令时,它只是跳过这些命令并结束作业。你知道为什么我得到了测试日志,但没有执行ls吗?我尝试了同步和异步,但都表现出相同的行为 这是我的消费者 从'@nestjs/bull'导入{Process,Processor}; 从'bull'导入{Job}; 从“shelljs”导入shell; @处理器('scan_scm') 导出类SCMConsumer{ @过程() 异步转码(作业:作业){ con

我想在nestjs队列使用者中使用shell命令,如
git clone
。但是当我用shelljs执行命令时,它只是跳过这些命令并结束作业。你知道为什么我得到了测试日志,但没有执行ls吗?我尝试了同步和异步,但都表现出相同的行为

这是我的消费者

从'@nestjs/bull'导入{Process,Processor};
从'bull'导入{Job};
从“shelljs”导入shell;
@处理器('scan_scm')
导出类SCMConsumer{
@过程()
异步转码(作业:作业){
console.log('scm-info2');
console.log(job.data);
console.log('test');
//同步运行外部工具
const result=await shell.exec('ls-la',{async:true});
console.log(result.exitCode);
如果(result.exitCode!==0){
console.log(result.stdout);
}
控制台日志(结果);
返回结果;
}
}
这是我的应用程序模块

@模块({
进口:[
BullModule.forRoot({
redis:{
主机:“localhost”,
港口:6379,
},
}),
BullModule.registerQueue({
名称:'scan_scm',
}),
SCMConsumer,
],
控制器:[AppController],
提供者:[AppService],
})
导出类AppModule{}
这是我的服务

@Injectable()
导出类应用程序服务{
构造函数(@InjectQueue('scan_scm')私有作业队列:队列){}
getHello():字符串{
返回“你好,世界!”;
}
addToQueue(对象:任意){
this.jobQueue.add(对象);
}
}
这是我的控制器

从'@nestjs/common'导入{Controller,Get,Param};
从“/app.service”导入{AppService};
@控制器()
导出类AppController{
构造函数(私有只读appService:appService){}
@获取(':id')
getHello(@Param('id')id):任何{
this.appService.addToQueue({test:id});
返回{test:id};
}
}

因此,对于其他任何想这样做的人来说,这里是解决问题的方法: 您可以为作业配置超时,默认情况下这似乎很低。我只是手动将其设置为10秒,这可能有点高,但出于测试目的,这是可以的

因此,您的模块应该如下所示(查看
defaultJobOptions
):

从'@nestjs/bull'导入{BullModule};
从'@nestjs/common'导入{Module};
从“./app.controller”导入{AppController};
从“/app.service”导入{AppService};
从“/scm info”导入{SCMConsumer};
@模块({
进口:[
BullModule.forRoot({
redis:{
主机:“localhost”,
港口:6379,
},
}),
BullModule.registerQueue({
名称:'scan_scm',
defaultJobOptions:{timeout:10000},
}),
SCMConsumer,
],
控制器:[AppController],
提供者:[AppService],
})
导出类AppModule{}