使用catchall路由表达静态文件夹

时间:2015-11-05 09:08:41

标签: express

我正在使用MEAN堆栈构建angularJS应用程序。我想创建一个catchall路由,它总是重定向到我的index.html文件,但是我也希望提供一些我在本地安装bower的依赖项。

使用我当前的配置,快递应用程序将所有公共文件作为html返回,因此我的javascript依赖项不起作用。如果我添加app.use(express.static('public'));,则捕获路由将停止工作。知道我做错了吗?

这是我的server.js:

var config = require('./config');

//app configuration
    // body parser
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    //CORS requests
    app.use(function(req, res, next) {
        res.setHeader('Access-Control-Allow-Origin', '*');
        res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
        res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, content-type, Authorization');
        next();
    });
    //log all requests to console
    app.use(morgan('dev'));
    //db
    mongoose.connect(config.database);

//API routes
    var apiRoutes = require('./app/routes/api')(app, express);
    //register our routes
    app.use('/api', apiRoutes);

app.use(express.static('public'));

//catchall route
app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname + '/public/app/views/index.html'));
});

//start the server
app.listen(config.port);
console.log('Running on: ' + config.port);

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

尝试在“ / public”处托管公共文件,并在“包罗万象”路由后附加“ /”。

以下是我过去使用的内容

app.use('/public', express.static('public'));

// ... all other routes

//catch-all-else route
app.get('/*', function(req, res) {
    res.sendFile(path.join(__dirname + '/public/app/views/index.html'));
});