首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法解析APIService的所有参数

无法解析APIService的所有参数
EN

Stack Overflow用户
提问于 2019-06-04 07:15:37
回答 1查看 336关注 0票数 0

我想通过Angular应用程序访问Azure上的API服务器。应用程序可以连接到本地版本的API服务器。

Azure上的版本需要标头信息进行身份验证。

我试过了:

添加标题(参见api.service.ts) -几种不同的形式

代码语言:javascript
复制
 AuthInterceptor & HttpHeaders

https://ryanchenkie.com/angular-authentication-using-the-http-client-and-http-interceptors

app.module.ts

代码语言:javascript
复制
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { Injectable } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';

import { AppRoutingModule } from './app-routing.module';

import { AppComponent } from './app.component';
import { PeopleComponent } from './people/people.component';

import { AuthInterceptor, APIService } from './api.service';

// @Injectable({
//   providedIn: 'root'
// })

@NgModule({
  declarations: [
    AppComponent,
    PeopleComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    AppRoutingModule,
    HttpClientModule,

  ],
  providers: [
    APIService,
    // {
    //   provide: HTTP_INTERCEPTORS,
    //   useClass: AuthInterceptor,
    //   multi: true,
    // }
    // ,

  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

api.service.ts

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpInterceptor, HttpResponse, HttpEvent, HttpHandler, HttpRequest } from '@angular/common/http';

import { Observable, of } from 'rxjs';
import { catchError, map, tap, concat } from 'rxjs/operators';

import { Person, } from './person';
import { PeopleComponent } from './people/people.component';

@Injectable({
  providedIn: 'root'
})

export class AuthInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    req = req.clone({
      setHeaders: {
        'Content-Type' : 'application/json; charset=utf-8',
        'Accept'       : 'application/json',
        // 'Authorization': `Bearer ${AuthService.getToken()}`,
      },
    });

    return next.handle(req);
  }
}

export class APIService {

  public onPremURL = 'http://am-web05:3030/api/v1/';
  public azureURL = 'https://amazng-webapi.azurewebsites.net/api/';

  public baseURL = this.azureURL;

  private skip;
  private limit = 20;
  private lastRecord;
  private headers;
  people: Person[];

  constructor(
    private http: HttpClient,
    private messageService: MessageService){ }

public httpOptions = {
  headers: new HttpHeaders({ 
    'Content-Type': 'application/json',
    "Access-Control-Allow-Origin": 'origin',
    "Access-Control-Allow-Methods": "POST, GET, OPTIONS, PUT, DELETE",
    "Access-Control-Allow-Headers":
        "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization",
    })
  };

  getDATA (url): Observable<Person[]> {

    url = this.baseURL + url;
    return this.http.get<Person[]>(url, this.httpOptions)
      .pipe(

        tap(people => this.log(this.limit + " people returned")),
        catchError(this.handleError('getPeople', [])),
      );
  }

API应返回数据

我收到以下错误:

代码语言:javascript
复制
Uncaught Error: Can't resolve all parameters for APIService: (?, ?).
    at syntaxError (compiler.js:2426)
    at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getDependenciesMetadata (compiler.js:18979)
    at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getTypeMetadata (compiler.js:18872)
    at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getInjectableTypeMetadata (compiler.js:19094)
    at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver.getProviderMetadata (compiler.js:19103)
    at compiler.js:19041
    at Array.forEach (<anonymous>)
    at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getProvidersMetadata (compiler.js:19001)
    at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver.getNgModuleMetadata (compiler.js:18720)
    at JitCompiler.push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._loadModules (compiler.js:26004)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-04 07:22:22

您缺少@Injectable()属性:

代码语言:javascript
复制
@Injectable()
export class APIService {}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56435603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档