0
我想在我的应用程序中使用默认控制器和默认操作,以便如果用户进入root用户,他将被提供相应的页面。 对于我做了一个中间件在nodejs中重写url
module.exports = function (controller, action) {
return function (req, res, next) {
// remove any trailing slashes
req.originalUrl = req.originalUrl.replace(/\/$/, "");
// provide default controller
if (!req.params.controller) {
req.originalUrl = '/' + controller;
}
// provide default action
if (!req.params.action) {
req.originalUrl = req.originalUrl + '/' + action;
}
console.log(req.originalUrl); // gives me expected result
next();
}
}
,这是我的应用程序代码:
var router=require(./router())
app.use('/:controller?/:action?',urlMaker(config.defaultController,config.defaultAction));
app.use('/',router);
这是路由器代码:
var express = require('express');
var globals = require('../globals');
function getRouter() {
var router = express.Router();
var controllerList = globals.getController();
console.log("Creating routes for available controllers");
for (var name in controllerList) {
//start creating routes for available controllers
router.get('/' + name + '/:action', function (req, res, next) {
console.log("router reached");
var action = req.params.action;
controllerList[name][action](req, res);
});
console.log("Created route for " + name);
}
router.get('/test', function() {
console.log("hello");
});
return router;
}
module.exports = getRouter;
我在做什么错。问题是路由器没有收到操作名称。怎么做 ?
当我为目录硬编码一个路由时,即使在重写之后它仍然执行正常。但是当我尝试重写URL时,在for循环中创建的路由不起作用。然而,他们的工作,如果我直接输入正确的url,如localhost:3000 /目录/索引工作正常,但不适用于本地主机:3000 –