从Typescript类定义ExpressJS路由

时间:2016-03-17 15:11:17

标签: node.js express typescript

我正在尝试从Typescript类加载ExpressJS路由。这个想法是,这最终应该是动态路线。但我已经坚持在课堂上定义硬编码路线。

我的index.ts js看起来像这样:

import generic = require('./generic');
import Generic = generic.Generic;

class Test {

  private app:any;
  private port:number = 3000;

  constructor() {
    this.app = express();
    new Generic();
    this.app.listen(this.port, () => {
      console.log('Listening on port ' + this.port);
    });
  }
}

export = Test;
new Test();

然后我的generic.ts看起来像这样。我正试图从这个类中定义另一条路线:

module Generic {
  export class Generic {

    constructor() {
      console.log('In generic');

      var router:any = express.Router();

      router.get('/', function (req, res) {
        res.setHeader('Content-Type', 'application/json');
        res.status(200).send("AAA");
      });
    }
  }
}
export = Generic;

当我运行我的应用程序时,我看到控制台中出现 In generic 消息。但是当我加载浏览器时,它说:

Cannot GET /

因此,由于某种原因,它并没有真正从Generic类注册路线。我做错了什么?

1 个答案:

答案 0 :(得分:1)

看看sample on Microsoft's github page。他们只使用express.Router而不是使用get,而是从外部模块导入函数。它对我来说效果很好。

app.ts

import * as express from "express";
import * as routes from "./routes/index";

var app = express();

app.get('/', routes.index);

路由/ index.ts

import express = require("express")

export function index(req: express.Request, res: express.Response) {
    res.render('index', { title: 'ImageBoard'});
};