协议的ngx-mqtt服务选项错误

时间:2019-01-24 12:34:46

标签: angular mqtt

在我的应用程序中,我使用的是angular 7和ngx-mqtt包“ ngx-mqtt”:“ ^ 6.8.3”。该应用程序通过https运行,因此MQTT服务器上也使用了安全连接。

这是我的环境。ts

MQTTCONFIG: {
    broker: 'theBroker',
    hostname: 'theHostname',
    **protocol: 'wss'**,
    port: thePort,
    username: 'theUsername',
    password: 'thePassword',
    path: 'thePath',
    topic_query: 'theTopicQuery',
    topic_update_state: 'theTopicUpdateState',
    clientID: 'smartorder'
  }

这是我的app.module.ts(省略了一些声明和导入):

import { MqttMessage, MqttModule, MqttServiceOptions } from 'ngx-mqtt';
.
.
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    ReactiveFormsModule,
    BrowserAnimationsModule,
    AppRoutingModule,
    MaterialModule,
    LayoutModule,
    MqttModule.forRoot(environment.MQTTCONFIG)
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

我遇到以下错误:

ERROR in src/app/app.module.ts(62,24): error TS2345: Argument of type '{ broker: string; hostname: string; protocol: string; port: number; username: string; password: string; path: string; topic_query: string; topic_update_state: string; clientID: string; }' is not assignable to parameter of type 'IMqttServiceOptions'.
  Types of property 'protocol' are incompatible.
    Type 'string' is not assignable to type '"wss" | "ws"'.

第62行是这样的:MqttModule.forRoot(environment.MQTTCONFIG)

MQTT选项中的属性协议设置为“ wss”: 协议:“ wss”

如何纠正此错误?

2 个答案:

答案 0 :(得分:0)

您正在使用的ngx-mqtt库对协议进行枚举。不幸的是,如果没有键入内容,您将无法在environment.ts中设置枚举值。

简单的解决方法: 从environment.ts中排除协议值,然后直接在app.module.ts中设置它,如下所示:

// environment.ts
MQTTCONFIG: {
    broker: 'theBroker',
    hostname: 'theHostname',
    port: thePort,
    username: 'theUsername',
    password: 'thePassword',
    path: 'thePath',
    topic_query: 'theTopicQuery',
    topic_update_state: 'theTopicUpdateState',
    clientID: 'smartorder'
}

// app.module.ts
export const MQTT_SERVICE_OPTIONS: IMqttServiceOptions = {
    broker: environment.MQTTCONFIG.broker,
    connectOnCreate: true,
    hostname: environment.MQTTCONFIG.hostname,
    port: environment.MQTTCONFIG.port,
    path: environment.MQTTCONFIG.path,
    username: environment.MQTTCONFIG.username,
    password: environment.MQTTCONFIG.password,
    topic_query: environment.MQTTCONFIG.topic_query,
    topic_update_state: environment.MQTTCONFIG.topic_update_state,
    clientID: environment.MQTTCONFIG.clientID,
    protocol: 'wss'
};

如果您确实想从您的environment.ts中使用该协议,则设置connectOnCreate: false,并在构建时缺少的情况下,在构建后的 内从应用控制器内部加载协议,并且然后连接到代理。

答案 1 :(得分:0)

这是一个打字稿错误,您必须将类型从string缩小到'ws' | 'wss'。理想情况下,您不想重新定义硬编码的枚举类型,因此可以像这样对现有定义进行搭载:

{
  ...
  protocol: 'wss' as IMqttServiceOptions['protocol'],
  ...
}