node.js servidor da web estático para aplicativos de página única que usam a API History

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);
};