【问题标题】:Configure node express for Backbone SPA with pushState使用 pushState 为 Backbone SPA 配置 node express
【发布时间】:2018-11-16 00:13:38
【问题描述】:

我的 express 应用有一个休息服务器和一个使用 Backbone 的 SPA。使用 # 历史记录一切正常,即

Backbone.history.start();

如果我这样做:

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

Backbone 路由器停止工作 - Backbone 处理良好的路由(例如#route)在变为 /route 时被发送到 Express。用以下方式表达错误:

Cannot GET /route

我试过了:

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

但没有区别。

我也试过了:

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

快递 - 没有区别。

表达 server.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);

Backbone 路由器(瘦了一点):

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

我不需要任何 SEO,我只想在应用程序的路线中拍摄那些“#”。

【问题讨论】:

    标签: javascript node.js express backbone.js url-routing


    【解决方案1】:

    我认为路由器工作正常。当您从浏览器而不是应用程序直接调用 /index.html/someroute 时,它“不起作用”。

    要处理这个问题,你必须在 express 中捕获它

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

    应该可以。

    请务必先声明另一条路线(如/rest),否则它会在到达'/rest' 之前被'*' 捕获。这是由于 express 正在使用中间件模式(只是提醒您可能已经知道这一点)。

    希望对你有帮助!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2015-05-01
    • 1970-01-01
    • 2013-11-27
    • 2016-06-10
    • 2014-05-11
    相关资源
    最近更新 更多