如何避免为我的每个html文件添加ExpressJS app.get()

How to avoid adding ExpressJS app.get() for each of my html files?

本文关键字:ExpressJS 添加 app get 文件 html 何避免 我的      更新时间:2024-04-27

我有以下项目结构(为简洁起见,省略了不相关的文件):

- app
    - authentication
        - authentication.controller.js
        - authentication.routes.js
        - authentication.scss
        - registration.html
        - user.model.js
    - app.js
    - app.scss
- server
    - server.controller.js
    - server.js
    - server.routes.js
- views
    - index.html

问题是,当我使用html文件作为AngularJS路由的模板URL时,我会收到一个"无法获取/path/to/someFile.html"错误。

(function() {
    angular
        .module('appName', [
            'ngMessages',
            'ngResource',
            'ui.router'
        ])
        .config(function($stateProvider) {
            $stateProvider
                .state('registration', {
                    url: '/registration',
                    templateUrl: '/app/authentication/registration.html',
                    controller: 'AuthenticationController'
                });
        });
})();

这是否意味着我必须在server.js文件中为我使用的每个html文件添加以下代码块?

app.get('/app/authentication/registration.html', function(request, response) {
    response.sendFile(path.resolve('app/authentication/registration.html'));
});

这似乎是一种巨大的痛苦。我目前还必须为我拥有的每个css和js文件做这件事。我可以使用gull来连接它们,所以我只需要为一个css和一个js文件提供一个app.get,但我不能为html文件这样做。

有更好的方法来处理这个问题吗?为每个html文件设置一个角度路由和一个快速路由没有多大意义。

您可以使用Express:轻松地提供静态文件

app.use(express.static('views'));
// http://localhost/ -> views/index.html

要将目录服务到特定路径,可以使用:

app.use('/app', express.static('app'));
// http://localhost/app/authentication/registration.html
//      -> app/authentication/registration.html

这将解析路径并为页面提供服务。

如果你只想提供特定的页面(例如视图),我建议你把它们都放在一个目录中,只提供静态目录。

另请参阅:Express API