Я хочу иметь контроллер по умолчанию и действие по умолчанию в своем приложении, так что если пользователь придет к корню, ему будет показана соответствующая страница. Для этого я сделал промежуточное программное обеспечениеRewrite url in nodejs
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;
Что я делаю неправильно. Проблема в том, что маршрутизатор не получает имени действия. Как это сделать ?
Когда я жестко программирую маршрут для Каталога, он выполняется отлично даже после перезаписи. Но маршруты, созданные в цикле for, не работают, когда я пытаюсь переписать URL. Однако они работают, если я непосредственно ввожу правильный URL-адрес, например localhost: 3000/Catalog/index работает нормально, но не работает для localhost: 3000 –