Javascript 扩展快速路由器

Javascript 扩展快速路由器,javascript,node.js,express,Javascript,Node.js,Express,有没有扩展express.Router的方法 我试过这个: class Test extends express.Routeur() { }; 但是express给了我一个错误 有什么解决方案吗?您不能这样做,因为express.Router是一个函数。我还没有找到如何用函数扩展类。但您可以使用一种方法,即如何使用此方法,或在ES2015中使用标准方法: import * as express from 'express'; let router = express.Router();

有没有扩展express.Router的方法

我试过这个:

class Test extends express.Routeur() {

};
但是express给了我一个错误


有什么解决方案吗?

您不能这样做,因为
express.Router
是一个函数。我还没有找到如何用函数扩展类。但您可以使用一种方法,即如何使用此方法,或在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;

也许是这样的:

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

var myRouter = new My_Router();

正确的方法是:

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

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

对不起,我一点也不懂英语。感谢谷歌翻译

构造函数应该返回路由器的完美(实际上是函数)对象。 您可以向该对象添加任何您想要的内容,或者根据您的意愿对其进行更改。 当然,每个接口都将有一个新的路由器对象

还需要确定构造函数的原型。这发生在第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!!");

});

这样做可能会有所帮助

 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)

请将完整的堆栈跟踪添加到问题帖子中。可能您在尝试进行此注册时拼写错误
Routeur
。应用程序没有发生此注册。请使用(route)!你能告诉我这是否有效吗?你不是忘了创建对象吗
app.use(new Test())
你是如何让它工作的?我想用同样的方法。但是tslint说,
Type'(options?:RouterOptions)=>Router'不是构造函数类型
。没有工作:(对不起,换行符在注释中不工作)///类测试扩展了express.Router{///constructor(){///super();///this.get('/',(req,res)=>console.log('Test');/////let Test new Test();///console.log(
测试实例的测试:
,测试实例的测试);///false///console.log(
express.Router的测试实例:
,express.Router的测试实例);//false///console.log(
测试类型:
,测试类型);//函数///console.log(
test.constructor:
,test.constructor);//function(){…}@ngfelixl你知道吗?