[eggjs/egg]想要通过命令或者fork子进程的方式执行脚本文件,并能够拥有egg实例的属性,就像执行单测一样,能够使用orm操作数据库。

2024-08-05 273 views
5

想要通过命令或者fork子进程的方式执行脚本文件,像执行单测一样,能够使用orm操作数据库。不知道有没有什么方式

回答

3

参考django项目中执行脚本

8

你写个 node cli,在里面启动 egg,然后把你需要的指令封装下,里面就是 http 调用对应的接口呗。

或者是 REPL 的方式,通过 sock 的方式。

2

这个有点违背了我的本愿。 我现在要写一个接口,这个接口是要去执行一个耗时很长的任务,我开始想用fork或者spawn的方式创建子进程,执行脚本文件或者命令,但是无法传递对象类型的数据,比如ctx上下文。 所以我看了下单测里面有用egg-mock这个库去创建app和ctx实例,想用类似这种方式去写一个脚本,然后在接口里面执行命令。

7

但是这样上下文信息会丢,比如请求的参数什么的。而且我有个特别沙雕的做法,我把项目中的controller、service、model都托管给typedi容器,所以ctx和app中我拿不到service和model。。。自己把自己给坑了。。

4

你指的是运行期收到用户的请求后,触发一个后台任务? 这种肯定不能用 egg-mock 啥的。

耗时很长的任务,一般是要丢队列中,给一个单独的服务去处理的,而且一般不应该直接丢 ctx,而是把对应的关键数据拿出来丢过去。

4

对,我之前想丢队列,但是又觉得不值得。。其实不是很长,就是拉取微信全量用户信息。

1

那就直接 ctx.runInBackground 吧

7

666,没注意到有这个api,感谢