3

我正在尝试将 Express 设置为与 Backbone 和 pushState 一起使用,但我不确定如何处理路由。我尝试添加一个中间件函数(基于https://gist.github.com/3402977)通过将 插入到 url 来处理任何未定义的路由#,但似乎中间件永远不会被调用:

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('yadda yadda'));
  app.use(express.session());
  app.use(app.router);

  // This should handle undefined routes.
  app.use(function(err, req, res, next){
    // Isn't getting called.
    newUrl = req.protocol + '://' + req.get('Host') + '/#' + req.url;
    res.redirect(newUrl);
  });

  app.use(express.static(path.join(__dirname, 'public')));
});

目前,每当我访问我没有在 Express ( http://localhost:3000/test/foo) 中定义的路线时,它都会给我一个Could not GET /test/foo错误。我希望它重定向到,http://localhost:3000/#/test/foo以便 Backbone 可以处理永久链接等的路由。我错过了什么?

4

1 回答 1

1

对于登陆这里的后代:答案是他的中间件应该app.use(app.router);在行之前。

于 2013-02-28T01:24:00.943 回答