我将使用Brunch编译的AngularJS应用程序部署到了Heroku。此应用使用具有一些状态的UI路由器。
我注意到,如果我从AngularJS应用中单击浏览器后退按钮,则无法返回google。在对所有应用程序进行调试之后,问题是相同的:当我按下浏览器后退按钮时,UI Router将URL作为AngularJS路由捕获。由于该路由不存在,因此将执行else函数。
我在Heroku中部署了我的应用程序。我的一些应用程序是:
如果我尝试在localhost中重现此问题,则不会发生。 Heroku可能会进行任何重定向,从而破坏返回导航,但是我想放弃我做错了什么。
router.js主文件:
(function() {
"use strict";
angular
.module("routes")
.config(config)
.run(run);
config.$inject = ["$urlRouterProvider", "$stateProvider"];
function config($urlRouterProvider, $stateProvider) {
$urlRouterProvider.otherwise(function($injector, $location) {
$location.path("/");
});
$stateProvider
.state("layout", {
url: "",
abstract: true,
views: {
header: {
templateUrl:
"app/angular/views/layouts/header/header.html",
controller: "HeaderController as header"
},
footer: {
templateUrl:
"app/angular/views/layouts/footer/footer.html",
controller: "FooterController as footer"
}
},
resolve: {}
})
.state("home", {
url: "/",
views: {
"main@": {
templateUrl: "app/angular/views/home.html",
controller: "HomeController as home"
}
},
parent: "layout",
resolve: {}
})
.state("cookies-policy", {
url: "/politica-de-cookies",
views: {
"main@": {
templateUrl:
"app/angular/views/cookies-policy/cookies-policy.html"
}
},
parent: "layout",
resolve: {}
});
}
run.$inject = ["$rootScope", "$transitions"];
function run($rootScope, $transitions) {
$transitions.onStart({}, onStart);
function onStart() {
$rootScope.loading = true;
}
$transitions.onSuccess({}, onSuccess);
function onSuccess(transition) {
document.body.scrollTop = document.documentElement.scrollTop = 0;
$rootScope.currentState = transition.to().name;
$rootScope.loading = false;
}
$transitions.onError({}, onError);
function onError() {}
}
})();
Node JS路由器:
module.exports = function(app) {
var api = express.Router();
var api_sunshades = express.Router();
var api_emails = express.Router();
...
// API de la web
var api_getSunshades = function(req, res) {
const sunshades = require("./data/sunshades.json");
return res.json(sunshades);
};
var api_getSunshadeByCode = function(req, res) {
var code = req.params.code;
const sunshades = require("./data/sunshades.json");
var sunshade = sunshades.find(function(sunshade) {
return sunshade.type === code;
});
if (sunshade === undefined) {
return res.status(404).json({});
} else {
return res.json(sunshade);
}
};
var api_notFound = function(req, res) {
return res.status(404).send("Rayosol Toldos API - Method not found");
};
// Asociacion de vistas a las rutas
app.get("/google0b123d2132a7917d.html", vistas_verificacion_dominio_google);
// Asociacion de metodos de la API a las rutas
api_sunshades.route("").get(api_getSunshades);
api_sunshades.route("/:code").get(api_getSunshadeByCode);
api.use("/sunshades", api_sunshades);
api.get("/*", api_notFound);
app.use("/api", api);
app.get("/sitemap.xml", function(req, res) {
res.sendFile(path.join(__dirname, "./views", "sitemap.xml"));
});
app.set("json spaces", 4);
app.get("*", function(req, res) {
return res.sendFile(path.join(__dirname, "../../public", "index.html"));
});
};
我还注意到,浏览器历史记录包括当前页面(例如cida.herokuapp.com)作为上一页,如图所示。
有人遇到过这个问题吗?非常感谢。