Обработка ошибок с помощью Typescript и Express в Node.js - PullRequest
0 голосов
/ 18 июня 2020

Я начинаю с Node и Typescript, и у меня есть вопрос.

У меня есть эти 2 файла.

server.ts

import express = require('express');
import IConfiguration from "../config/config";


export default class Server {

    public app: express.Application;
    public configuration: IConfiguration;

    constructor( configuration: IConfiguration ) {
        this.configuration = configuration;
        this.app = express();
    }

    static init(configuration: IConfiguration) {
        return new Server(configuration);
    }

    start(callback: Function) {
        this.app.listen(this.configuration.port, callback());
        this.app.use(express.static(this.configuration.public_path))
    }
}

index.ts

import Server from './server/server';
import Configuration from "./config/config";
import * as dotenv from 'dotenv';
import router from './router/router';

//Loading .env file
dotenv.config();

//Init config
const configuration = Configuration.init();

//Init server
const server = Server.init(configuration);
server.app.use(router);
server.start(() => {
   console.log('Server running at port ' + configuration.port);
});

В index.ts у меня есть обратный вызов app.listen при запуске, но я не знаю, как написать эту обработку ошибок для захвата ошибок. Как я могу добавить этот .on ("error") в мою функцию обратного вызова?

server.start(() => {
   console.log('Listening on port: ', port);
}).on('error', (e) => {
   console.log('Error happened: ', e.message)
});

Я пытался поместить это в свой index.ts, но получаю такую ​​ошибку: «Свойство 'on' не существует по типу 'void' "

1 Ответ

0 голосов
/ 18 июня 2020

Ваша переменная server является экземпляром вашего класса Server, и когда вы вызываете start, она ничего не возвращает, она просто неявно возвращает undefined (или void в терминах Typescript) и undefined точно не имеет метода on, поэтому вы не можете его таким образом связать. В основном это то, что говорится в сообщении об ошибке.

Что вы можете сделать, это вернуть this.app из метода start, например.

    start(callback: Function) {
        this.app.listen(this.configuration.port, callback());
        this.app.use(express.static(this.configuration.public_path))
        return this.app;
    }

Или разделите эти две строки следующим образом:

server.start(() => {
   console.log('Listening on port: ', port);
});

server.app.on('error', (e) => {
   console.log('Error happened: ', e.message)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...