我希望所有请求都返回index.html页面,其中包含将处理自己的路由的前端应用程序。此外,我希望正确返回css / html / images / js,以便不返回所有这些的index.html。所以我在server.js中有类似的东西
var express = require('express');
var app = express();
var path = require("path");
app.use(express.static(path.join(__dirname,"app")));
app.get('*', function(req, res) {
console.log(res);
res.sendFile(path.join(__dirname, 'app', 'index.html')); // load the single view file (angular will handle the page changes on the front-end)
});
app.listen(5000);
现在,如果我输入localhost:5000
,我可以获得所有资源,而且每件事情都可以。但是如果我localhost:5000/something
我认为express.static
找不到所有资源,并由app.get(*,...)
处理,那么所有资源都会以index.html的形式返回。
那么我怎样才能让这种设置起作用?!
答案 0 :(得分:2)
这是正确的方法。阅读评论。
var staticUrl = '/static';
var publicFolder = path.resolve(__dirname, '../public')//make sure you reference the right path
//serve all atatic files prefixed with '/static/*'
app.use(staticUrl, express.static(publicFolder));
app.use(staticUrl, function(req, res, next) {
res.send(404);
});
//serve index.html for all not 'static' prefixed requests
app.all('/*', function(req, res) {
res.sendfile('index.html', {root: publicFolder});
});
答案 1 :(得分:0)
这是我在Node.js + AngularJS项目中使用的代码。
app.use(function (req, res, next) { if (path.extname(req.path).length > 0) { // normal static file request next(); } else { // should force return `index.html` for angular.js req.url = '/index.html'; next(); } }); // static file serve app.use(express.static(__dirname + '/app'));