Angularjs 带express的角度HTML5模式
我知道这个问题有答案,但这些答案并不完全适合我。我用的是Angular 1.4和Express 4。Express处理API调用,Angular应该处理所有HTML My express app.js:Angularjs 带express的角度HTML5模式,angularjs,node.js,express,Angularjs,Node.js,Express,我知道这个问题有答案,但这些答案并不完全适合我。我用的是Angular 1.4和Express 4。Express处理API调用,Angular应该处理所有HTML My express app.js: var express = require('express'); var path = require('path'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyP
var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
require('./routes/api')(app);
var app = express();
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, '../client')));
// This covers serving up the index page
app.use(express.static(path.join(__dirname, '../client/.tmp')));
app.use(express.static(path.join(__dirname, '../client/app')));
app.all('*', function(req, res) {
res.redirect('/index.html');
});
module.exports = app;
这是angular app.js
angular
.module('punyioApp', [
'ngAnimate',
'ngAria',
'ngCookies',
'ngMessages',
'ngResource',
'ngRoute',
'ngSanitize',
'ngTouch'
])
.config(function ($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl',
controllerAs: 'main'
})
.when('/howitworks', {
templateUrl: 'views/howitworks.html',
controller: 'HowItWorksCtrl',
controllerAs: 'howitworks'
})
.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode(true);
});
现在,如果我转到,我得到了主角度视图,正如预期的那样。问题是当我转到时,它会将我重定向到,而不会显示“howitworks”视图。如何修复express router以便转到?您的代码只是将每个请求重定向到
index.html
,这不是您想要的。您确实需要该文件,但由于Angular处理路由,因此您只希望Express发送该文件,不需要任何问题
基本上,您不应该使用重定向
,而是发送文件
:
app.get('/*', function(req, res) {
res.sendFile(__dirname + '/index.html')
});
另外,正如有人在评论中指出的,你应该使用
get
而不是all
如果你使用的是angularjs ui路由器,没有必要使用express,你可以使用node static或只是nginx,使用grunt或gulp connect插件连接dubug,我认为这样更好 如果是翡翠,您可以使用:
app.get('/*', function (req, res) {
res.render('index.pug');
});
为什么您使用的是
app.all(*……
,而不是简单的app.get(“/”,…
?谢谢。我的客户端本质上是一个独立的项目。express应用程序没有“howitworks”端点。但是,我的Angular代码理解它。我正在寻找如何将未知URL发送到Angular。如果我可以重定向到index.html,似乎我应该能够以某种方式将其发送到Angular,而Angular.Expr就是这样ess正在处理RESTful API,我希望能够在一台服务器上部署所有内容。这可能有点奇怪,但我喜欢这种设置。在此之前添加一个特定的路由处理程序:app.get('/API/some',…)
然后app.get('/*',…)
就这样!谢谢@Pier-Luc@Pier-LucGendreau为什么每次我尝试实现这一点时&我转到我的url,我下载该文件而不是打开页面。我也发表了一篇关于这一点的帖子,但我似乎无法用您的解决方案修复它: