Ao desenvolver aplicativos de página única que usam a API de histórico, você tem um problema com servidores de desenvolvimento comuns, como servidor grunt ou python -m SimpleHTTPServer : Ao atualizar a página, seu navegador assume que sua localização atual está realmente se referindo a um arquivo real solicita isso do servidor, que, obviamente, não existe.
Para lidar com isso, você pode usar o seguinte código node.js, que mostra como node-static (npm install node-static –save-dev) é usado para servir arquivos estáticos enquanto retorna para /index.html sempre que um arquivo não é de um tipo de recurso estático específico.
/*global module:false,require:false,console:false */
var webroot = "./target";
var port = 8000;
var assetTypes = [".js", ".css", ".txt", ".ico", ".html", ".png"];
var nodeStatic = require("node-static");
var http = require("http");
var util = require("util");
function isStaticResource(url) {
return assetTypes.reduce(function(memo, assetType) {
return memo || url.indexOf(assetType) !== -1;
}, false);
}
module.exports.startServer = function() {
var file = new(nodeStatic.Server)(webroot, {
cache: 0
});
http.createServer(function(req, res) {
req.addListener("end", function() {
if (!isStaticResource(req.url)) {
req.url = "/index.html";
}
file.serve(req, res, function(err, result) {
if (err) {
console.error("Error serving %s - %s", req.url, err.message);
res.writeHead(err.status, err.headers);
res.end();
}
});
});
}).listen(port);
console.log("Development server running at http://localhost:%d", port);
};