代码之家  ›  专栏  ›  技术社区  ›  minisaurus

使用pushstate为骨干spa配置node express

  •  1
  • minisaurus  · 技术社区  · 6 年前

    我的快速应用程序有一个rest服务器和一个使用主干网的spa。使用历史,即

    Backbone.history.start();
    

    如果我这样做:

    Backbone.history.start({ pushState: true });
    

    主干路由器停止工作-主干处理良好的路由(例如路由)在变为/路由时被发送到express。表示错误:

    Cannot GET /route
    

    我试过:

    Backbone.history.start({ pushState: true, root '/' });
    

    但没有区别。

    我也试过:

    app.use('/*', function ...
    

    在快车里-没有区别。

    快递服务器.js:

    var express = require('express');
    var app = express();
    var bodyParser = require('body-parser');
    
    app.use(express.static(__dirname + '/public'));
    
    app.get('/', function(req, res){
      res.render('index.ejs');
    });
    
    var rest = require('./routes/rest');
    
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    
    app.use('/rest', rest);
    
    app.listen(3000);
    

    主干路由器(精简了一点):

    const Router = Backbone.Router.extend({
      routes: {
        '': Controllers.home,
        'admin(/:table)(/:id)': Controllers.admin,
        'master(/:table)(/:id)': Controllers.master
      }
    });
    Backbone.history.start({ pushState: true });
    

    我不需要任何搜索引擎优化,我只想得到这些'在应用程序的路线''。

    1 回复  |  直到 6 年前
        1
  •  1
  •   François Richard    6 年前

    我认为路由器工作正常。当你直接打电话的时候“不起作用” /index.html/someroute 从浏览器而不是应用程序。

    要处理这个你必须用快递

    app.get('*', function...)
    

    应该工作。

    一定要先声明另一条路线(比如 /rest )否则它会被 '*' 在到达之前 '/rest' . 这是因为express正在使用中间件模式(只是提醒您可能已经知道这一点)。

    希望有帮助!