使Angular路线与快速路线一起工作
通过设置Angular路线与Express一起工作,我陷入了僵局。
我试图做这样的Express 4,NodeJS,AngularJS路由,但没有工作。 静态index.html服务每次url更改,但Angular不捕捉部分。
在我的快递中,我有以下代码:
var express = require("express"); var app = express(); app.use(express.static(__dirname + '/app')); app.use("*",function(req,res){ res.sendFile(path.join(__dirname,"app/index.html")); }); app.listen(1337, function(){ console.log("Server is listening on port 1337"); });
而在我的Angular应用程序中,我有以下几点:
var app = angular.module("myapp",["ngRoute","appControllers"]); app.config(["$routeProvider","$locationProvider",function($routeProvider,$locationProvider){ $locationProvider.html5Mode(true); $routeProvider .when("/list",{ templateUrl: "/partials/users.html", controller: "userListCntr" }) .when("/edit", { templateUrl: "/partials/edit.html", controller: "userEditCntr" }) .when("/register", { templateUrl: "/partials/register.html", controller: "registerCntr" }) .when("/login", { templateUrl: "/partials/login.html", controller: "registerCntr" }); }]);
我的浏览器控制台中没有任何错误。 html检查器显示: <!-- ngView: -->
所以该指令是一种初始化。
和依赖列表:
dependencies": { "angular": "1.3.x", "angular-mocks": "1.3.x", "jquery": "1.10.2", "bootstrap": "~3.1.1", "angular-route": "1.3.x", "angular-resource": "1.3.x", "angular-animate": "1.3.x" }
这里是我的文件结构:
--app (angular app) --components --js --css --img --assets --partials --index.html --node-modules --server.js (here express settigs are)
此外,我做了如下的变化来说明所有的静态资源,但仍然不起作用:
app.use(express.static(__dirname+ "/app")); app.use('/js', express.static(__dirname + '/app/js')); app.use('/dist', express.static(__dirname + '/../dist')); app.use('/css', express.static(__dirname + '/app/css')); app.use('/assets', express.static(__dirname + '/app/assets')); app.use('/components', express.static(__dirname + '/app/components')); app.use('/img', express.static(__dirname + '/app/img')); app.use('/partials', express.static(__dirname + '/app/partials')); app.all('/*', function(req, res, next) { // Just send the index.html for other files to support HTML5Mode res.sendFile('/app/index.html', { root: __dirname }); });
请帮忙,因为我找不到解决办法。 谢谢!
当你不通过express.use()
的path,那么它默认为/
。 您为*
设置的前进规则是冗余的,甚至可能不起作用。
此外,由于您使用的是html5mode
,因此您需要明确地设置路由资源,Express不会尝试为所有请求提供index.html
文件。
尝试从Angular UI-Router的这个例子的大小:
var express = require('express'); var app = express(); app.use('/js', express.static(__dirname + '/js')); app.use('/dist', express.static(__dirname + '/../dist')); app.use('/css', express.static(__dirname + '/css')); app.use('/partials', express.static(__dirname + '/partials')); app.all('/*', function(req, res, next) { // Just send the index.html for other files to support HTML5Mode res.sendFile('index.html', { root: __dirname }); }); app.listen(3006); //the port you want to use
谢谢大家的帮助。 我通过在我的Angular index.html的头部分插入<base href="/" />
解决这个问题。 它为我工作,但现在它像魔术和货物编码,因为我不明白为什么它的工作:)在这里find解决scheme: AngularJS:如何启用$ locationProvider.html5Mode深连接
我只是想补充说,添加base href=
帮助我。 我有我的应用程序的静态快递和直接浏览我的angular应用程序中的路线会导致很多
拒绝执行脚本,因为它的MIMEtypes('text / html')不可执行,严格的MIMEtypes检查被启用
错误被抛出。 但添加base href
固定,我现在可以直接浏览我的angular度路线。
虽然使用base href=
的@kirgolbuild议的解决scheme可以正常工作,但是还有一种解决scheme可能会引起用户寻找简单的路由服务。 在这个解决scheme中,我们不会使用ExpressJS路由
简单地使用这个
app.use(express.static(__dirname + '/app'));
而不是这个
app.all('/*', function(req, res, next) { // Just send the index.html for other files to support HTML5Mode res.sendFile('index.html', { root: __dirname }); });
这样expressJS会自动提供index.html在这个静态位置,并自动处理路由。 它的行为就像一个简单的http服务器。 当你使用app.all
/ app.get
处理路由的app.get
– 你将不得不设置base href
来告诉$locationProvider
它可以匹配路由的位置