【问题标题】:ERROR TypeError: this._http.request(...).share is not a function错误类型错误:this._http.request(...).share 不是函数
【发布时间】:2018-11-07 15:15:32
【问题描述】:

当我尝试授权时,我收到此错误:

ERROR TypeError: this._http.request(...).share 不是函数

在 AuthService.request (auth.service.ts:569)

在 AuthService.post (auth.service.ts:502)

在 AuthService.signIn (auth.service.ts:166)

在 SignInComponent.signIn (sign-in.component.ts:35)

在 Object.eval [as handleEvent] (SignInComponent.html:24)

在handleEvent (core.js:13547)

在 callWithDebugContext (core.js:15056)

在 Object.debugHandleEvent [as handleEvent] (core.js:14643)

在 dispatchEvent (core.js:9962)

在评估时(core.js:10587)

我只是找不到她在哪里,请谁能帮忙。使用了两个路由和两个模块。

这里是一些文件的列表。如果你需要扔别的东西,写。虽然这里的想法是所有可能出现错误的列表。

app.module.ts:

import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { NgModule  } from '@angular/core';
import { HttpModule } from '@angular/http';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';

import { ToastModule, ToastOptions } from "ng2-toastr";
import { ToastCustomOptions } from "./shared/toast-cutom-options";

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

import { routing } from './routings/routing.module';

import { SignInModule } from './layout/sign-in/sign-in.module';
import { LayoutModule } from './layout/layout.module';

import { User } from "./models/user.model";
import { AuthGuard } from './shared/guards/auth.guard';
import { AuthService } from './services/auth/auth.service';
import { environment } from "../environments/environment";

declare let moment: any;

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserAnimationsModule,
    BrowserModule,
    RouterModule,
    FormsModule,
    HttpModule,
    SignInModule,
    ReactiveFormsModule,
    LayoutModule,
    routing,
    ToastModule.forRoot()
  ],
  providers: [AuthService, AuthGuard,  {provide: ToastOptions, useClass: ToastCustomOptions} ],
  bootstrap: [AppComponent]
})
export class AppModule { 
  constructor(public authService: AuthService) {
    moment.locale('ru');

    this.authService.init({
      apiPath: environment.apiUrl,
      signInRedirect: 'sign_in',
      signInPath: '/sign_in',
      validateTokenFailedRedirect: 'sign_in',
      signOutFailedValidate: true,
      dataStorage: localStorage,
      userDataClass: User
    });
  }
}

router.module.ts:

import { Routes, RouterModule } from '@angular/router';
import { ModuleWithProviders } from '@angular/core';

import { LayoutComponent} from '../layout/layout.component';

import { SignInComponent } from '../layout/sign-in/sign-in.component';

import { NotFoundComponent } from '../layout/not-found/not-found.component';

import { AuthGuard } from '../shared/guards/auth.guard';

export const routes: Routes = [
  { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
    { path: 'sign_in',   component: SignInComponent },
  { path: 'dashboard',   component: LayoutComponent },
  { path: 'not_found',   component: NotFoundComponent },
  { path: '**', component: NotFoundComponent }

];

export const routing: ModuleWithProviders = RouterModule.forRoot(routes, { useHash: true });

【问题讨论】:

  • 通常,您的错误中有一个 Stacktrace,它应该会告诉您错误是在哪里引发的。您可以将其添加到您的问题中吗?
  • @Nikolaus 添加者
  • @ShashankVivek “请求”类型的参数不能分配给“字符串”类型的参数。
  • 我没有使用过share(),但是由于错误.request()没有提供share
  • 你的rxjs 版本是什么?

标签: angular


【解决方案1】:

让响应 = this._http.request(new Request(baseRequestOptions)).share();

baseRequestOptions 应该是 object 类型。

从您的代码中不清楚它是否是一个对象。 检查 typeof(baseRequestOptions) 如果它不是对象然后修改你的代码。

示例代码:

constructor(public http:Http) {}
  request(url:string) {
    return this.http.request(new Request({
     method: RequestMethod.Get,
     url: url,
     search: 'password=123'
  })).share();
}

【讨论】:

  • auth.service 中不能有错误我有一个带有这个 auth.service 的程序,并且一切正常
  • 但是从您的错误中可以清楚地看出 baseRequestOptions 中存在错误。您是否通过在控制台中登录来检查 baseRequestOptions。
  • 检查 typeof (baseRequestOptions) "undefined"
  • 好的。在与 options 合并之前和之后记录 baseRequestOptions 的数据和类型。然后你就会知道它到底哪里出了问题。
【解决方案2】:

RxJS v5.5.2+ 已移至 Pipeable 运算符以改进树抖动并更容易创建自定义运算符。 现在需要使用pipe 方法组合operators
Refer This
新建导入

import { share} from 'rxjs/operators';

示例

this.response$=this.http.get('url').pipe(share());

除此之外,您使用的是不推荐使用HttpModule,您应该改用HttpClientModule

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-24
    • 2023-03-05
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2018-04-28
    • 2019-02-14
    • 2021-10-02
    相关资源
    最近更新 更多