From 1585f4005bdc9f875c116f57557cc1a5d6e1da74 Mon Sep 17 00:00:00 2001 From: Eluinhost Date: Sun, 27 Dec 2015 13:34:40 +0000 Subject: [PATCH 1/2] feat(*): support html5 mode routing --- gulpfile.js | 1 + server.js | 16 ++++++++++++++-- src/index.js | 6 ++++-- src/index_template.html | 3 ++- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 730db2e..09e53c6 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -179,6 +179,7 @@ gulp.task('webpack:prod', ['webpack:init-prod'], function(done) { gulp.task('webpack:dev', ['webpack:init'], function(done) { new WebpackDevServer(compiler, { publicPath: config.output.publicPath, + historyApiFallback: true, stats: { colors: true }, diff --git a/server.js b/server.js index d8053d6..0075fff 100644 --- a/server.js +++ b/server.js @@ -14,12 +14,24 @@ app.get('/api/sync', function(req, res) { if (!config.server.apiOnly) { express.static.mime.define({'text/cache-manifest': ['appcache']}); - app.use(express.static('web', { + var assets = express.static('web', { etag: false, setHeaders: function(res) { res.setHeader('Cache-Control', 'no-cache'); } - })); + }); + + // Grab from assets first + app.use(assets); + + // Rewrite to index if not found + app.all('*', function(req, res, next) { + req.url = '/index.html'; + next(); + }); + + // Serve index from assets + app.use(assets); } var server = app.listen(config.server.port, function() { diff --git a/src/index.js b/src/index.js index 0813d42..e503d4b 100644 --- a/src/index.js +++ b/src/index.js @@ -90,7 +90,9 @@ import * as Settings from 'app/pages/Settings'; let pages = [About, Generator, TemplateEditor, PostList, Help, Settings, Post, Post404]; -function setupStates($stateProvider, $urlRouterProvider) { +function setupStates($stateProvider, $urlRouterProvider, $locationProvider) { + $locationProvider.html5Mode(true).hashPrefix('!'); + $stateProvider.state('app', { abstract: true, url: '', @@ -110,7 +112,7 @@ function setupStates($stateProvider, $urlRouterProvider) { $urlRouterProvider.otherwise(PostList.state.url); } -setupStates.$inject = ['$stateProvider', '$urlRouterProvider']; +setupStates.$inject = ['$stateProvider', '$urlRouterProvider', '$locationProvider']; function scrollToTop($rootScope, $window) { $rootScope.$on('$stateChangeSuccess', () => $window.scrollTo(0, 0)); diff --git a/src/index_template.html b/src/index_template.html index 5435b46..c1f0648 100644 --- a/src/index_template.html +++ b/src/index_template.html @@ -1,10 +1,11 @@ - + +