当前位置: 首页 > 面试题库 >

带有Express的Angular HTML5模式

丁嘉
2023-03-14
问题内容

我知道这个问题有答案,但它们并没有为我充分发挥作用。我正在使用Angular
1.4和Express4。Express正在处理API调用,而Angular应该正在处理所有HTML。

我的快递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;

这是有角度的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);
  });

现在,如果我转到http:// localhost:3000
/
,则会得到预期的主Angular视图。问题是当我转到http:// localhost:3000 /
howitworks时,它将我重定向到http:// localhost:3000
/ index.html,并且不显示“
howitworks”视图。如何修复快速路由器,以便可以转到http:// localhost:3000 /
howitworks?


问题答案:

您的代码只是将每个请求重定向到index.html,这不是您想要的。您确实需要该文件,但是由于Angular可以处理路由,因此您只希望Express发送文件,而不会出现任何问题。

基本上,您不应该使用redirect,但是sendFile

app.get('/*', function(req, res) { 
  res.sendFile(__dirname + '/index.html')
});

另外,正如某人在评论中指出的那样,您应该使用get和而不是all



 类似资料:
  • 我是NodeJS的新手,我正试图从express和express-generator开始。我已经使用以下命令安装了express: 然后我安装了快速生成器模块: 然后,我为项目创建一个文件夹并安装解除依赖项: 那里一切正常,但当我尝试使用以下命令启动服务器时,问题就出现了: 好像服务启动了但是一启动就关闭了,结果: 当我尝试打开localhost:3000它不起作用。我在网上搜索,我还没有找到解决

  • 我对Express.js和Github OAuth api很陌生,但遇到了困难。 它会返回一个代码。从这一点开始,我使用该代码获取访问令牌。访问令牌会返回,但它会作为下载到我的机器的文件返回,而不是对我的服务器的响应。我错过了什么?

  • 我正在努力正确配置nginx,以确保它可以处理Express(端口8081)和Socket的代理。io(端口3000)。下面是我的配置,它当前为整个请求(不仅仅是Socket.io)产生了502错误: 据我所知,我需要确保Socket使用的Websocket。io已升级到HTTP,但这正是我努力掌握自己需要做什么的地方。可能是两个插座。io和Express需要在不同的端口上运行,然后需要根据我上面

  • 我正在查看用Scala编写GraphQL服务器的Sangria库。但奇怪的是,同一个类型系统必须实现两次:(1)作为GraphQL类型声明的一部分,(2)也是在服务器端,作为Scala case类,附带ObjectType、InterfaceType等。 在Scala中硬编码类型系统尤其令人厌烦,因为我的目的是能够CRUD任意形状的聚合,其中每个形状都被定义为类型的GraphQL集合。例如,假设S

  • 如果我使用,我会得到以下错误: 我找了很长时间,但什么也找不到。

  • 我有一个有组的模式。这些组都是可选的。 完整的posible模式是: 但也可以看起来像这样 不可能在组中获得限定词,例如(组A不可能' = ')。 所以我尝试了这些正则表达式: 问题: 如果缺少组,则不匹配 具有“#”(E)的组包含第一个组“-”(F)<ul> 001.002 可编程逻辑控制器。003 M01.001 P1 测试-KF2-- 我的错是什么?