我曾经遇到和你一样的问题,这里有两个可能的解决方案!
//////////////////////////////
解决方案1:列出您想/不想“提供”的目录
//////////////////////////////
如何:
假设您的目录结构如下:
-app/
---controllers/
---directives/
---etc.
-public/
---img/
---css/
---index.html
---etc.
-views/
---home.html
---vehicle.html
---etc.
-app.js (run with 'node app.js')
其中这3个文件夹(app、public、views)的规则不同,您需要决定哪些要进行serve,哪些要进行render:
- app/
- serve: 如果您的网站执行 GET /app/controller.js 命令,则需要向他们提供该文件。
- public/
- serve: 如果您的网站执行 GET /public/img/logo.jpg 命令,则需要向他们提供该文件。
- views/
- render: 如果您的网站执行 GET views/home 命令,则需要从您的 angular.js 路由中渲染视图。
现在,在您的 node/express js 文件中,找到或添加以下内容:
app.use(express.static(path.join(__dirname, 'app')));
app.use(express.static(path.join(__dirname, 'public')));
更多信息:
app.use(express.static(__dirname + '/client/views'));
表示您正在从 /client/views 目录下提供字面文件,但不包括该目录之外的任何内容。请参见 视图文件夹中的angularjs index.html
扩展示例:
这将是您可能的配置:
var express = require('express'),
bodyParser = require('body-parser'),
methodOverride = require('method-override'),
errorHandler = require('error-handler'),
morgan = require('morgan'),
routes = require('./routes/index'),
http = require('http'),
path = require('path');
var app = module.exports = express();
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(morgan('dev'));
app.use(bodyParser());
app.use(methodOverride());
app.use(express.static(path.join(__dirname, 'app')));
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', routes.index);
app.get('/partials/:name', routes.partials);
app.get('*', routes.index);
http.createServer(app).listen(app.get('port'), function () {
console.log('Express server listening on port ' + app.get('port'));
});
那么这将是你的路由文件:
exports.index = function(req, res){
res.render('index');
};
exports.partials = function (req, res) {
var name = req.params.name;
res.render('partials/' + name);
};
//////////////////////////////
解决方案 #2:先检查文件是否存在
//////////////////////////////
如何:
保持现有的所有内容不变,但是在尝试“res.sendFile”之前先检查它是否存在。例如:
exports.all = function (req, res) {
var name = req.params[0];
fs.exists(path+'/'+name, function(exists){
if(exists)
{
res.sendFile(path+'/'+name);
}else{
res.render('index');
}
});
};
扩展示例:
这将是您可能的配置:
var express = require('express'),
bodyParser = require('body-parser'),
methodOverride = require('method-override'),
errorHandler = require('error-handler'),
morgan = require('morgan'),
routes = require('./routes/index'),
http = require('http'),
path = require('path');
var app = module.exports = express();
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(morgan('dev'));
app.use(bodyParser());
app.use(methodOverride());
app.use(express.static(path.join(__dirname, '')));
app.get('/', routes.index);
app.get('/partials/:name', routes.partials);
app.get('*', routes.all);
http.createServer(app).listen(app.get('port'), function () {
console.log('Express server listening on port ' + app.get('port'));
});
这是你的路由文件:
var fs = require('fs');
var path = require('path');
exports.index = function(req, res){
res.render('index');
};
exports.partials = function (req, res) {
var name = req.params.name;
res.render('partials/' + name);
};
exports.all = function (req, res) {
var name = req.params[0];
fs.exists(path+'/'+name, function(exists){
if(exists)
{
res.sendFile(path+'/'+name);
}else{
res.render('index');
}
});
};
//////////////////////////////
希望这能帮到你!