【问题标题】:angular2-in-memory-web-api 404 errorangular2-in-memory-web-api 404 错误
【发布时间】:2016-07-08 21:03:45
【问题描述】:

我正在尝试按照本指南以 Angular 2 构建 5 分钟应用程序: https://angular.io/docs/ts/latest/tutorial/toh-pt6.html.

在 http 部分,我添加了一个假服务器,但我收到 404 错误,因为 angular2-in-memory-web-api.

http://localhost:4200/vendor/angular2-in-memory-web-api/in-memory-backend.service.js
Failed to load resource: the server responded with a status of 404 (Not Found)

我试图遵循这个答案:Angular2 Tutorial (Tour of Heroes): Cannot find module 'angular2-in-memory-web-api'

但他没有使用 angular-cli + 我不知道在哪里添加他们在那里谈论的那些依赖项。

我的 main.ts:

// Imports for loading & configuring the in-memory web api
import { XHRBackend } from '@angular/http';

import { InMemoryBackendService, SEED_DATA } from 'angular2-in-memory-web-api';
import { InMemoryDataService }               from './app/in-memory-data.service';

// The usual bootstrapping imports
import { bootstrap } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { AppComponent, environment } from './app/';
import { APP_ROUTER_PROVIDERS } from './app/app.routes';
import { HTTP_PROVIDERS } from '@angular/http';
if (environment.production) {
  enableProdMode();
}

bootstrap(AppComponent, [
  APP_ROUTER_PROVIDERS,
  HTTP_PROVIDERS,
  { provide: XHRBackend, useClass: InMemoryBackendService }, // in-mem server
  { provide: SEED_DATA, useClass: InMemoryDataService }      // in-mem server data
]);

这是我的 package.json:

{
  "name": "angular2-projects",
  "version": "0.0.0",
  "license": "MIT",
  "angular-cli": {},
  "scripts": {
    "start": "ng serve",
    "postinstall": "typings install",
    "lint": "tslint \"src/**/*.ts\"",
    "test": "ng test",
    "pree2e": "webdriver-manager update",
    "e2e": "protractor"
  },
  "private": true,
  "dependencies": {
    "@angular/common": "2.0.0-rc.4",
    "@angular/compiler": "2.0.0-rc.4",
    "@angular/core": "2.0.0-rc.4",
    "@angular/forms": "0.2.0",
    "@angular/http": "2.0.0-rc.4",
    "@angular/platform-browser": "2.0.0-rc.4",
    "@angular/platform-browser-dynamic": "2.0.0-rc.4",
    "@angupackage.lar/router": "3.0.0-beta.1",
    "@angular/router-deprecated": "2.0.0-rc.2",
    "es6-shim": "0.35.1",
    "reflect-metadata": "0.1.3",
    "rxjs": "5.0.0-beta.6",
    "systemjs": "0.19.26",
    "zone.js": "0.6.12"
  },
  "devDependencies": {
    "angular-cli": "1.0.0-beta.9",
    "codelyzer": "0.0.20",
    "ember-cli-inject-live-reload": "1.4.0",
    "jasmine-core": "2.4.1",
    "jasmine-spec-reporter": "2.5.0",
    "karma": "0.13.22",
    "karma-chrome-launcher": "0.2.3",
    "karma-jasmine": "0.3.8",
    "protractor": "3.3.0",
    "ts-node": "0.5.5",
    "tslint": "3.11.0",
    "typescript": "1.8.10",
    "typings": "0.8.1"
  }
}

我需要做什么才能消除该错误?

【问题讨论】:

    标签: javascript angular npm angular-cli angular2-http


    【解决方案1】:

    回答一个旧帖子,但是我的解决方案不同,所以我想我会在这里发布。

    我在使用最新包和使用 angular(4 及以上)时遇到了完全相同的错误。

    原因是在我的app.module.ts 中,我在HttpModule 之前导入了InMemoryWebApiModule。将InMemoryWebApiModule 放在HttpModule 之后(毫无疑问应该是这样)就可以了。

    错误

    imports: [
          BrowserModule,
          FormsModule,
          InMemoryWebApiModule.forRoot(InMemoryDataService),
          HttpModule,
          JsonpModule,
    ]
    

    正确

    imports: [
          BrowserModule,
          FormsModule, 
          HttpModule,
          JsonpModule,
          InMemoryWebApiModule.forRoot(InMemoryDataService) //this has to be imported after httpModule
    ]
    

    【讨论】:

    • 同样的问题,更改导入顺序解决了这个问题。谢谢。
    【解决方案2】:

    首先,您需要npm i angular2-in-memory-web-api --save

    然后在 main.ts:

    import{InMemoryBackendService, SEED_DATA } from 'angular2-in-memory-web-api'

    在src/system-config.js:

    const barrels: string[] = [
      // Angular specific barrels.
      '@angular/core',
      '@angular/common',
      '@angular/compiler',
      '@angular/forms',
      '@angular/http',
      '@angular/router',
      '@angular/platform-browser',
      '@angular/platform-browser-dynamic',
    
    
      // Thirdparty barrels.
      'rxjs',
      'angular2-in-memory-web-api',
    
      // App specific barrels.
      'app',
      'app/shared',
      /** @cli-barrel */
    ];
    
    
    
        // Apply the CLI SystemJS configuration.
        System.config({
          map: {
            '@angular': 'vendor/@angular',
            'rxjs': 'vendor/rxjs',
            'main': 'main.js',
            'angular2-in-memory-web-api': 'vendor/angular2-in-memory-web-api'
          },
    

    并将其添加到项目根目录中的angular-cli-build.js:

       'angular2-in-memory-web-api/**/**/*.js'`
    

    最后重启服务器,在ng serve之前运行ng build。

    【讨论】:

    • 是的,抱歉,出现了错误,我更新并测试了,现在对我来说没有错误。
    • 只是为了确保:我添加到:dist/system-config.js 和 src/system-config.ts。但我确实得到了同样的错误:“localhost:4200/vendor/angular2-in-memory-web-api/… 加载资源失败:服务器响应状态为 404(未找到)”
    • 好的,尝试重启服务器并在ng serve之前运行ng build
    • 有效!请将您的最后一条评论添加到解决方案中,以供其他会收到此错误的人使用。非常感谢,非常感谢您的帮助!
    • 不要向/dist添加任何东西,即文件夹angular-cli添加所有东西。
    【解决方案3】:

    为最新版本的 angular2-in-memory-web-api 添加答案,因为我也花了几个小时试图找到 404 错误。

    1)首先,新的angular-in-memory-web-api 不推荐使用 angular2-in-memory-web-api,这意味着您需要确保将 package.json 更改为最新版本:

    "angular2-in-memory-web-api": "0.0.6",
    

    需要更改为:

    "angular-in-memory-web-api": "^0.1.3",
    

    2)记得修改systemjs.config.js (if in angular page tutorial for example as my case):

    'angular-in-memory-web-api': 'node_modules/angular-in-memory-web-api/bundles/in-memory-web-api.umd.js',
    

    3)在您的模块导入中更改为最新版本:

    import { InMemoryWebApiModule } from 'angular-in-memory-web-api/in-memory-web-api.module';
    

    需要改成新的声明:

    import { InMemoryWebApiModule } from 'angular-in-memory-web-api';
    

    4)然后重新运行npm install,应用程序应该可以使用最新版本运行而不会出现任何故障。这解决了我的问题。

    【讨论】:

    • 我喜欢这个。让我感到震惊的是“angular2-in-memory-web-api”不是最新的。按照这些说明完全解决了我的问题。谢谢!
    【解决方案4】:

    你错过了内存 web api 的 app.module 配置,这里是教程的部分:angular-toh-simulating-the-web-api

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2016-09-19
      相关资源
      最近更新 更多