angular2-in-memory-web-api 404 错误
angular2-in-memory-web-api 404 error
我正在尝试按照本指南在 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)
我试图遵循这个答案:
但他没有使用 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"
}
}
我需要做什么才能消除该错误?
首先,您需要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
重启服务器
为最新版本的 angular2-in-memory-web-api 添加答案,因为我也花了几个小时试图找到 404 错误。
1) 首先,angular2-in-memory-web-api 现在已弃用新的 angular-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
并且应用程序应该 运行 使用最新版本,没有任何故障。这解决了我的问题。
您错过了 in-memory web api 的 app.module 配置,这里是教程部分:angular-toh-simulating-the-web-api
回答旧的 post,但是我的解决方案不同所以我想我会 post 在这里。
我在使用最新软件包和使用 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
]
我正在尝试按照本指南在 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)
我试图遵循这个答案:
但他没有使用 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"
}
}
我需要做什么才能消除该错误?
首先,您需要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
重启服务器
为最新版本的 angular2-in-memory-web-api 添加答案,因为我也花了几个小时试图找到 404 错误。
1) 首先,angular2-in-memory-web-api 现在已弃用新的 angular-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
并且应用程序应该 运行 使用最新版本,没有任何故障。这解决了我的问题。
您错过了 in-memory web api 的 app.module 配置,这里是教程部分:angular-toh-simulating-the-web-api
回答旧的 post,但是我的解决方案不同所以我想我会 post 在这里。
我在使用最新软件包和使用 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
]