问题
I'm using AngularJS and ExpressJS and having an issue with routing. I saw many other posts but none of those solutions seemed to work. Here is my routes in Express:
module.exports = function(app, auth) {
//Api routes
var mycontroller = require('../app/controllers/mycontroller');
app.get('/api/dostuff/:id', mycontroller.getBlockByHash);
//Home route
app.get("/", function(req, res) {
res.render('index');
});
};
When I go to my root /
, everything works as expected. ExpressJS serves up my index and angular picks up the rest. When I click a link /blocks
, it works as expected since AngularJS picks up the route. But when I refresh, I get a 404 not found error.
I tried app.get('*'
instead, but that gives me a completely different error where nothing loads.

I'm using Jade
to create the basic page structure with Express. My Express config is:
app.use(express.favicon());
app.use(express.static(config.root + '/public'));
回答1:
When using html5Mode the documentation says:
Using this mode requires URL rewriting on server side, basically you have to rewrite all your links to entry point of your application (e.g. index.html)
What it doesn't mention is:
- You should exclude static assets like scripts/styles/images/fonts etc.
- You should also exclude your Restful API.
Your case:
The error you got there is express serving html into script tags and the browser fails to parse them as a valid javascript.
Use express.static
to serve static assets and then use app.get('*',
for redirecting all other requests to your angular.js entry point (index.html).
express.js middleware order do counts!
express.static
must be declared beforeapp.router
- Node.js / Express.js - How does app.router work?
来源:https://stackoverflow.com/questions/21067717/angularjs-and-express-routing-issue