代码之家  ›  专栏  ›  技术社区  ›  ProfK

为什么动态加载确实存在的文件时会得到404?

  •  1
  • ProfK  · 技术社区  · 8 年前

    事实上,我有三个404试图加载同一个文件,但我感兴趣的一个发生在这里,在我的 index.html :

    <script>
        System.import('app/main').catch(function (err) { console.error("IMPORT_ERR: " + err); });
    </script>
    

    记录的错误为:

    IMPORT_ERR: Error: Error: XHR error (404 Not Found) loading http://localhost:57971/node_modules/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js
            at XMLHttpRequest.wrapFn [as _onreadystatechange] (http://localhost:57971/js/zone.js:647:29)
            at ZoneDelegate.invokeTask (http://localhost:57971/js/zone.js:236:37)
            at Zone.runTask (http://localhost:57971/js/zone.js:136:47)
            at XMLHttpRequest.ZoneTask.invoke (http://localhost:57971/js/zone.js:304:33)
        Error loading http://localhost:57971/node_modules/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js as "@angular/platform-browser-dynamic" from http://localhost:57971/app/main.js
    

    然而,有问题的文件确实存在:

    PS C:\Dev\Angular2\Projects\Introduction\Code\src> ls TourOfHeroes2\node_modules\@angular\platform-browser-dynamic\bundles
    
        Directory: C:\Dev\Angular2\Projects\Introduction\Code\src\TourOfHeroes2\node_modules\@angular\platform-brow
        ser-dynamic\bundles
    
    Mode                LastWriteTime         Length Name                                                          
    ----                -------------         ------ ----                                                          
    -a----       2016/09/25   8:50 AM           4631 platform-browser-dynamic-testing.umd.js                       
    -a----       2016/09/25   8:50 AM           8749 platform-browser-dynamic.umd.js                               
    -a----       2016/09/25   8:50 AM           4703 platform-browser-dynamic.umd.min.js                           
    

    文件夹 TourOfHeroes2 是web应用的根。

    1 回复  |  直到 8 年前
        1
  •  0
  •   ProfK    8 年前

    事实证明,该应用程序不允许对 node_modules 文件夹[1]。在应用程序运行之前,我对其进行了许多小改动,今天晚些时候我将在这里进行修改,但最重要的是 Startup :

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseDefaultFiles();
        app.UseStaticFiles();
        UseCustomFileServer(app, env);
    }
    
    private void UseCustomFileServer(IApplicationBuilder app, IHostingEnvironment env)
    {
        // this will serve up wwwroot
        app.UseFileServer();
    
        // this will serve up node_modules
        var provider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "node_modules"));
        var options = new FileServerOptions();
        options.RequestPath = "/node_modules";
        options.StaticFileOptions.FileProvider = provider;
        options.EnableDirectoryBrowsing = true;
        app.UseFileServer(options);
    }
    

    我认为,由于一些糟糕的设计, UseStaticFiles wwwroot ,所以我不得不补充 UseFileServer 对于

    [1] NET核心web应用程序默认情况下根本不允许提供任何静态文件。您必须添加 Microsoft.AspNetCore.StaticFiles 程序包到 project.json ,并将这两行添加到 Startup.Configure()

    app.UseDefaultFiles();
    app.UseStaticFiles();