有没有办法扩展express.Router
?
我试过了:
class Test extends express.Routeur() {
};
但快递给我一个错误。
任何解决方案?
答案 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)