Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 带express的角度HTML5模式_Angularjs_Node.js_Express - Fatal编程技术网

Angularjs 带express的角度HTML5模式

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

我知道这个问题有答案,但这些答案并不完全适合我。我用的是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 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,我下载该文件而不是打开页面。我也发表了一篇关于这一点的帖子,但我似乎无法用您的解决方案修复它: