经过多次努力,我提出了这个问题。但遗憾的是没有结果。我正在使用angularjs和expressjs。我使用$location.html5Mode(true)
关闭了hashbang模式并添加了<base href="/">
。它一目了然。但是当我按下F5按钮时。它向我展示了一个非常难看的页面,没有任何css或js脚本加载????任何帮助,将不胜感激。我目前正在使用带有node.js的expressjs骨架。
这是我的App.Js文件代码
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var app = express();
var viewRoutes = require('./routes/view'),
loginRoutes = require('./routes/login');
// view engine setup
app.set('views', path.join(__dirname, 'views')); //setting to HTML engine instead of EJS | JADE
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', viewRoutes);
app.use('/login', loginRoutes);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
这是我的COntroller文件编号:
var amApp = angular.module('amApp', ['ngRoute']);
amApp.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider
.when('/', {
templateUrl: '/home',
controller: 'homeCtrl'
})
.when('/home', {
templateUrl: '/home',
controller: 'homeCtrl'
})
.when('/login', {
templateUrl: '/login',
controller: 'loginCtrl'
})
.otherwise('/');
}]);
这是名为view.js的路线文件
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index');
});
router.get('/home', function(req, res, next) {
res.render('pages/home');
});
router.get('/login', function(req, res, next) {
res.render('pages/login');
});
module.exports = router;
我正在使用HTMl而不是EJS或JADE ..
答案 0 :(得分:0)
您应该检查资源的链接。
如果转向html5模式,还必须修改其他资源(如css)的链接!
打开开发人员工具(https://developers.google.com/web/tools/chrome-devtools/)并检查错误消息。所有路径都是正确的吗?
相应地更改路径,然后重试:)
答案 1 :(得分:0)
您需要在viewRoutes
和loginRoutes
文件中添加类似这些代码行的内容(这需要是服务器端的),您应该做得很好。每当有人尝试请求以/home
或/login
开头的网址时,这些都会在网址中添加哈希值。如果您有任何问题,请告诉我。
app.get('/home/*', function(req, res) {
res.redirect('/#' + req.originalUrl);
});
app.get('/login/*', function(req, res) {
res.redirect('/#' + req.originalUrl);
});
&#13;
我们假设您的网页在正常情况下处于mypage.com/#/index
。服务器将处理对mypage.com/
的请求,您的Angular代码将处理#/index
路由。当您关闭hashbang时,您现在拥有:mypage.com/index
。当您刷新页面时,您的浏览器将尝试转到mypage.com/index
,这通常由您的服务器作为/index
路由处理,因为没有哈希。我假设您还没有(在您的服务器中)编写该路由的处理程序,这就是显示奇怪页面的原因。该页面甚至可能是一个意外访问的静态文件,具体取决于命名和服务器配置。
我在我制作的网站上遇到了同样的问题,并且必须通过快递处理这条路线,才能将mypage.com/index
重新路由到mypage.com/#/index
。这会将用户发送到角度路由的正确位置,然后浏览器将隐藏hashbang。我的快速服务器上的代码适用于我的页面:
app.get('/chat-room/*', function(req, res) {
res.redirect('/#' + req.originalUrl);
});
app.get('/admin/*', function(req, res) {
res.redirect('/#' + req.originalUrl);
});
&#13;
这会将对mydomain.com/chat-room/
或mydomain.com/admin/
的任何请求重定向到相应的mydomain.com/#/chat-room/
或mydomain.com/#/admin/
正确的角度路由。
答案 2 :(得分:0)
您应该处理快递应用中的所有路线,而不仅仅是默认的“/”路线。当您在“/".
以外的状态刷新页面时,快递应用程序无法确定更新的路径在this问题中查看我的答案。