【问题标题】:Can I map /status and /status/:id if I use nodejs and angular.js?如果我使用 nodejs 和 angular.js,我可以映射 /status 和 /status/:id 吗?
【发布时间】:2015-07-02 12:56:41
【问题描述】:

我在路由 /status 和 /status/:id 时遇到了一些问题。我收到“无法获取 /status”错误消息

我写过的角度:

App.config(['$routeProvider', '$locationProvider', function($routeProvider,$locationProvider){
    $routeProvider.when('/status', {
        templateUrl:    'views/statusList',
        controller:     'dailyStatusCtrl'
    });
    $routeProvider.when('/status/:oldDate', {
        templateUrl:    'views/statusList',
        controller:     'dailyStatusCtrl'
    });
    $routeProvider.otherwise({redirectTo: '/'});
    $locationProvider.html5Mode(true).hashPrefix('!');
}]);

在 nodejs 方面,我使用了jade 并写过:

server.use(connRoute(function(router){
    router.get('/', function (req, res, next){
      console.log('/ router');
      res.render('index');
    });
    router.get('/views/:view', function(req, res){
        res.render(req.params.view)
    });
    router.get('status/:id', function (req, res, next){
        console.log('status * router');
        res.render('index');
    });
    router.get('*', function (req, res, next){
        console.log('** router');
        res.render('index');
    });
}));

/status/:id 部分是一个测试。但它不起作用。我收到消息:“/status”的“无法获取 /status”,但它适用于“/status/somecontent”。

我的代码有什么问题?如何使用 /status 和 /status/:id ?

如果没有第二个路由器,我会得到“无法获取 /status/somecontent”,但它适用于 /status。

谢谢

编辑 1:

我已将节点中的路线编辑为:

server.use(connRoute(function(router){
    router.get('/', function (req, res, next){
      res.render('index');
    });
    router.get('/views/:view', function(req, res, next){
        res.render(req.params.view)
    });
}));

并添加connect-modrewrite:

server.use(modRewrite([
    '^([^.]+)$ /index.html [L]'
]));

但是重写规则是错误的。我不能只重新加载主页 (/)。任何其他页面都不能重新加载。还是顺序有问题?

这是实际的顺序:

server.use(connRoute(function(router){
    router.get('/', function (req, res, next){
      res.render('index');
    });
    router.get('/views/:view', function(req, res, next){
        res.render(req.params.view)
    });
}));


server.use(modRewrite([
    '^([^.]+)$ /index.html [L]'
]));


server.use(servStatic(__dirname + '/../logbook'));

对正确的 modRewrite 规则有任何想法吗?

【问题讨论】:

  • 如果您以角度路由它,则不需要在服务器端路由它。
  • 如果我为 status/:id 删除路由器,我会得到“无法获取 /status/somecontent”。我认为角度的配置还可以。但是在节点中是错误的。我想这与 htmlMode 有关。
  • 并且您没有使用/statusstatus 的路由服务器端
  • 您确定views/statusList 存在并呈现您期望的方式吗?
  • 否,/status 使用 * 路由。它也在加载正确的模板。只有 /status/123 不起作用。

标签: angularjs node.js routes connect


【解决方案1】:

如果您为每个 url 都有一个路由器条目,则没有 modrewrite 它可以工作。不要忘记使用“function (req, res, next)”。

server.use(connRoute(function(router){
    router.get('/', function (req, res, next){
      res.render('index');
    });
    router.get('/status', function (req, res, next){
      res.render('index');
    });
    router.get('/status/:olddate', function (req, res, next){
      res.render('index');
    });
    router.get('/views/:view', function(req, res, next){
        res.render(req.params.view)
    });
}));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2013-10-24
    • 2014-07-30
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多