扩展express.Router

时间:2016-02-06 14:15:48

标签: javascript node.js express

有没有办法扩展express.Router

我试过了:

class Test extends express.Routeur() {

};

但快递给我一个错误。

任何解决方案?

5 个答案:

答案 0 :(得分:5)

正确的方法:

class Test extends express.Router {
    constructor() {
        super();
        this.get('/', (req, res) => console.log('test'));
    }
};

当您编写express.Router()(带括号)时,您已经调用了构造函数,因此您尝试扩展对象而不是类。

答案 1 :(得分:3)

你不能这样做,因为express.Router是一个功能。我还没有找到如何使用该函数扩展类。但您可以使用这种方法http://brianflove.com/2016/03/29/typescript-express-node-js/或使用ES2015的标准方法:

import * as express from 'express';

let router = express.Router();

/* GET home page. */
router.get('/', (req, res, next) => {
  res.render('index', { title: 'Express' });
});

export = router;

答案 2 :(得分:1)

也许是这样的:

function My_Router() {
    return express.Router.apply(this, arguments);
}

var myRouter = new My_Router();

答案 3 :(得分:1)

不好意思,我一点都不懂英语。多亏了Google翻译...

构造函数应返回路由器的理想对象(实际上是函数)。 您可以根据需要添加到该对象,也可以根据需要对其进行更改。 当然,每个接口都有一个新的路由器对象。

还必须确定构造函数的原型。这发生在第6行。

const Router = require("express").Router;

const myRouter = function () {

    const router = Router();
    Object.setPrototypeOf(Router, myRouter);

    router.myGet = function (path) {

        router.get.call(this, arguments);
        console.log("is my get function!!");

    };
    return router;
};

const router_custom = new myRouter();

router_custom.myGet("/", (req, res) => {

    res.send("hay!!");

});

答案 4 :(得分:0)

也许这样会有所帮助

 class YourController extends express.Router{
    constructor(){
        super()
        
        this.get("/", (req, res)=>{
            //do somthing
            res.send("return something");
        })
        
        this.get("/:id", (req, res)=>{
            //do something
            res.send("return something);
        })
    }
}

module.exports = new YourController();

用作:

const yourExtendedRouter = require("../controllers/YourController")

router.use("/base-url", yourExtendedRouter)