Экспресс-узел Typescript - требование POST не работает - PullRequest
0 голосов
/ 05 декабря 2018

Используя GitHub webhooks, я конвертирую старый проект в TypeScript и наткнулся на это.

Когда я отправляю данные json в localhost/github, я должен увидеть 111 222 hi, напечатанный нажурналы.Но все, что я вижу, это 111.Кажется, что мой проект Typescript не понимает req.on('data') req.on('end'), и я не уверен, почему.

У меня настроен анализатор тела для преобразования в json, но не повезло.Что мне здесь не хватает?

app.ts

import * as express from "express";
import * as bodyParser from "body-parser";
import { Routes } from "./routes/routes";
import * as mongoose from "mongoose";
import * as schedule from 'node-schedule';

import { StatusController } from './controllers/status.controller';

class App {

  public status: StatusController = new StatusController()
  public app: express.Application;
  public routePrv: Routes = new Routes();
  public _db: string = 'madeupname';
  public _mongo: string = 'mongodb://localhost:27017';

  constructor() {
    this.app = express();
    this.config();
    this.mongoSetup();
    this.routePrv.routes(this.app);
  }

  private config(): void {
    this.app.use(bodyParser.json());
    this.app.use(bodyParser.urlencoded({
      extended: false
    }));
  }

  private mongoSetup(): void {
    mongoose.Promise = global.Promise;
    mongoose.connect(`${this._mongo}/${this._db}`, {
      useNewUrlParser: true
    });
  }

}

export default new App().app;

status.controller.ts

import { StatusSchema } from '../models/status.model';
import { Request, Response } from 'express';

import * as crypto from 'crypto';
import * as moment from 'moment';
import * as fs from 'fs';
import * as request from 'request';
import * as Slack from 'slack-node';
import { Helpers } from '../helpers';

import { GitHubConfig } from '../../config/github';

const secret = GitHubConfig.secret;

export class GhNewPrController {

  public helpers: Helpers = new Helpers();
  public ghNewPrMethod: GhNewPrMethod = new GhNewPrMethod();

  public post(req: Request, res: Response) {
    let jsonString = '';
    console.log(111)

    req.on('data', (data) => {
      console.log(22);
      jsonString += data;
    })
    .on('end', () => {
      console.log('hi');
      const hash = `sha1=${crypto.createHmac('sha1', secret).update(jsonString).digest('hex')}`;
      console.log(jsonString);
      const payload = JSON.parse(jsonString);

      if (hash !== req.headers['x-hub-signature']) {
        const data = JSON.stringify({
          'error': 'invalid key',
          key: hash
        });
        return res.status(401).send(data);
      }
    });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...