如何在NodeJS和Express中使用AngularJS html 5模式?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (90)

我使用一个带有Express的NodeJS服务器来服务我的AngularJS应用程序。当我使用angularJS默认路由(Hashbang)时,这一切都很好,但现在我正在尝试激活HTML 5模式。

我正在激活html 5模式,如下所示:

$locationProvider.html5Mode(true).hashPrefix('!');

这就是我的NodeJSapp.js文件如下:

var path     = require('path'),
    express  = require('express'),
    app      = express(),
    routes   = require(path.join(__dirname, 'routes'));

app.configure(function() {
    app.use(express.logger('dev'));
    app.use(express.compress());
    app.use(express.methodOverride());
    app.use(express.bodyParser());
    app.use(app.router);
    app.all("/*", function(req, res, next) {
        res.sendfile("index.html", { root: __dirname + "/../app" });
    });
    app.use(express.errorHandler({
        dumpExceptions: true, 
        showStack: true
    }));
});

但是,这现在可以将所有请求作为我的index.html文件,因此我从需求JS中获得以下错误:

Uncaught SyntaxError: Unexpected token < 

我尝试在我的NodeJS中添加以下内容app.js因此,它将正确地服务于我的资源:

app.use("/js", express.static(__dirname + "/../app/js"));
app.use("/img", express.static(__dirname + "/../app/img"));
app.use("/css", express.static(__dirname + "/../app/css"));
app.use("/partials", express.static(__dirname + "/../app/partials"));

我还试着替换app.all声明:

app.use(function(req, res) {
  // Use res.sendfile, as it streams instead of reading the file into memory.
  res.sendfile(__dirname + '/../app/index.html');
});

但这也没用。我能做些什么来让angularJS html5模式与NodeJS和Express一起工作呢?谢谢。

提问于
用户回答回答于

您的初始修复(为特定前缀声明静态中间件处理程序)应该工作正常,但您需要确保声明: app.use("/js", express.static(__dirname + "/../app/js")); app.use("/img", express.static(__dirname + "/../app/img")); app.use("/css", express.static(__dirname + "/../app/css")); app.use("/partials", express.static(__dirname + "/../app/partials")); // any other routes: app.all("/*", ...);

另外,您需要确保前缀的静态处理程序实际上声明为OK(正确的路径),否则它们将无法找到任何请求的文件,请求将传递到中间件链,并最终由CATC-all处理程序处理。

热门问答

腾讯会议共享屏幕,其他人收到的是黑屏?

腾讯云音视频 支持 移动端h5吗( 不是小程序的)?

shixin

腾讯 · 高级产品经理 (已认证)

推荐

实时音视频TRTC的Web版是基于WebRTC的方案,需要浏览器的对WebRTC的支持,支持WebRTC的浏览器就可以。但是,移动端浏览器对WebRTC支持的情况并不好,建议使用小程序版。

如何用命令修改腾讯云解析目标ip?

氧化先生道可道 非常道 名可名 非常名
推荐
可以,参考: https://cns.api.qcloud.com/v2/index.php? &<公共请求参数> &Action=RecordCreate &domain=qcloud.com &subDomain=www &recordType=A &recordLine=默...... 展开详请

腾讯云IoT物联平台中如何自定义Topic?

DylanRichard

腾讯 · 产品经理 (已认证)

万物互联的时代,欢迎来到IoT的世界
推荐已采纳
第二个是物联网通信平台(IoT Hub)的,https://cloud.tencent.com/document/product/634/32546。目前物联网开发平台(IoT explorer)只支持基于数据模板协议的接入(文档 https://cloud.tencent.co...... 展开详请

组队匹配完整流程是怎样的?感觉缺少API支持?

您好,matchgroup匹配成功后,小组成员会进入同一个房间和同一个队伍,这个API需要传玩家ID,通过邀请好友进房间就能拿到玩家的id,解散房间后再调用matchgroup,在没有解散房间不能调用matchGroup 接口。

SCF使用了k8s或docker容器技术吗?

Mason-Serverless

腾讯 · 产品经理 (已认证)

推荐

SCF的新架构使用的轻量化虚拟机技术,同时MVM里内嵌的有docker,但是没有使用K8S

扫码关注云+社区

领取腾讯云代金券