ThinkJS 除了支持通过 URL 访问来执行外,还可以通过命令行的方式调用执行。使用方式如下:

上面的命令表示执行 模块下 index Controller 里的 indexAction。

携带参数

如果需要加参数,只要在后面加上对应的参数即可:

  1. node www/production.js home/index/index?name=thinkjs

Action 里就可以通过 this.get 方法来获取参数 name 了。

修改请求方法
  1. node www/production.js url=home/index/index&method=post

这样就把请求类型改为了 post。但这种方式下,参数 url 的值里就不能包含 & 字符了(可以通过 / 的方式指定参数,如node www/production.js url=home/index/index/foo/bar&method=post)。

除了修改请求类型,还可以修改下面的参数:

  • host 修改请求的 host 默认为 127.0.0.1
  • ip 修改请求的 ip 默认为 127.0.0.1
    修改 header

有时候如果想修改更多的 headers,可以传一个完整的 json 数据,如:

禁止 URL 访问

默认情况下,命令行执行的 Action 通过 URL 也可以访问到。如果禁止 URL 访问到该 Action,可以通过 think.cli 来判断。如:

  1. indexAction(){
  2. //禁止 URL 访问该 Action
  3. if(!think.cli){
  4. this.fail('only invoked in cli mode');
  5. ...
  6. }
  7. }
  1. cd project_path;
  2. node www/production.js home/index/index;

在项目目录下创建目录 crontab,将上面执行脚本存为一个文件放在该目录下。

借助系统里的 crontab 可以做到定时执行,通过命令 crontab -e 来编辑定时任务,如:

除了使用 crontab 和命令行联合执行定时任务外,也可以使用 node-crontab 模块执行定时任务。如:

  1. import crontab from 'node-crontab';
  2. // 1 小时执行一次

将上面代码文件存放在 src/common/bootstrap 目录下,这样可以在服务启动时自动执行。

  1. import crontab from 'node-crontab';
  2. let fn = () => {
  3. //定时任务具体逻辑
  4. }
  5. // 1 小时执行一次
  6. let jobId = crontab.scheduleJob('0 */1 * * *', fn);
  7. //开发环境下立即执行一次看效果
  8. if(think.env === 'development'){
  9. fn();