конфликт cron.schedule с this.knex при планировании запроса postgresql - PullRequest
0 голосов
/ 17 января 2020

Мой nodejs ругает меня, когда я добавляю конструктор knex перед расписанием cron. Как я могу решить эту проблему?

Мой план следующий: (1) выполнить еженедельную задачу, которая заключается в запросе к базе данных Postgresql, (2) создать документ xlsx, (3) написать результат запроса в документе.

Программа написана на Typescript, запущена в nodejs.

Изначально «this» не определено, поэтому я добавляю конструктор для knex. Однако после добавления конструктора cron.schedule показывает жалобу, что

Член 'cron' неявно имеет тип 'any'.

'schedule', в котором отсутствует тип возврата аннотация, неявно имеет возвращаемый тип 'any'.

(для функции) Ожидается объявление параметра.

Что я сделал не так? Пожалуйста, порекомендуйте. Заранее спасибо.

import * as cron from "node-cron";
import * as XLSX from 'xlsx';
import * as Knex from "knex";


export class ComplainService {
    constructor(private knex: Knex) { };

    **cron.schedule("* 45 23 * * 0", function()** {  //red line here//

        return this.knex.select('complain.complain_id').count('complain.complain_id').from('complain').groupBy('complain.complain_id'), function () {
            let workbook = XLSX.utils.book_new();
            try {
                XLSX.writeFile(workbook, "report.xlsx");
                console.log("Write to report.xlsx successfully!");
            } catch (error) {
                console.log("error")
            }
        })

    };

}

1 Ответ

0 голосов
/ 21 января 2020

В вашем синтаксисе так много ошибок, что он даже не смог правильно работать до добавления конструктора.

Попробуйте инкрементно кодировать, чтобы сначала проверить, работают ли самые простые части, а затем добавить больше функциональности.

например, с такими шагами:

Правильно написано объявление класса:

export class ComplainService {
    constructor(private knex: Knex) { };
}

, затем добавьте вызов в расписание:

export class ComplainService {
    constructor(private knex: Knex) { 
      cron.schedule("* 45 23 * * 0", function() {
        console.log('Cron runs');
      });
    }
}

Добавить простой запрос knex:

export class ComplainService {
    constructor(private knex: Knex) { 
      cron.schedule("* 45 23 * * 0", function() {
        const allComplains = await this.knex('complain');
        console.log(allComplains);
      });
    }
}

et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...