Unable to connect to aedes broker on node.js from ngx-mqtt client in angular app

45 Views Asked by At

Using ngx-mqtt on Angular (client) side and aedes (broker) on node.js side. But unable to see if the client/broker connection is successful. What am I doing wrong here? Upon connecting to broker, I'd expect console.log to print CLIENT_CONNECTED : MQTT Client (from Routes/mqtt.js), but node console prints nothing.

Code as follows:

Broker side (Node.js)

File: Index.js

const aedes = require('aedes')();
const mqttBroker = require('net').createServer(aedes.handle);

module.exports = {
  aedesInstance,
  mqttBroker,
};

app.use('/mqtt', require('./Routes/mqtt'));

File: server.js

const { aedes, mqttBroker } = require('./index');
mqttPort = 1883;

mqttBroker.listen(mqttPort, () =>{
    console.log('listeninig to mqttBroker on port: ', mqttPort);
});

server.js prints to console as expected

File: Routes/mqtt.js

const { aedes } = require('../index');
const express = require('express');
const router = express.Router();

aedes.on('client', function (client,err) {
  console.log(`CLIENT_CONNECTED : MQTT Client`)
})
module.exports = router;

Routes/mqtt.js prints nothing to console when client attempts connection

Client side (Angular with ngx-mqtt)

File: App.module

import { IMqttMessage, MqttModule, IMqttServiceOptions } from 'ngx-mqtt';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';

export const MQTT_SERVICE_OPTIONS: IMqttServiceOptions = {
  hostname: 'localhost',
  port: 1883,
  path: '/mqtt',
  clientId: '1234abcdef'
};

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    IonicModule.forRoot(),
    MqttModule.forRoot(MQTT_SERVICE_OPTIONS),
    AppRoutingModule],
  providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }],
  bootstrap: [AppComponent]
})
export class AppModule {}

File: home.html

<ion-button (click)="testMqtt()">Test MQTT</ion-button>

File: home.ts

import { Component, OnInit } from '@angular/core';
import { MqttClientService } from '../../services/mqtt-client.service';
import { MQTT_SERVICE_OPTIONS } from '../app.module';

export class HomePage {
  constructor(private mqttService: MqttClientService){}

  testMqtt(){
    this.mqttService.connectToBroker(MQTT_SERVICE_OPTIONS).subscribe({
      next: (resp) => console.log('response from connection to mqtt: ', resp),
      error: (err) => console.log('error from connection to mqtt: ', err)
    });
  }
}

testMqtt() above prints 'response from connection to mqtt: undefined'

File: mqtt-client.service

import { of, Subscription } from 'rxjs';
import { IMqttMessage, MqttService } from 'ngx-mqtt';

export class MqttClientService{
  subscriptions: Subscription = new Subscription();
  constructor(private mqttService: MqttService){}
  connectToBroker(connectionOptions){
    return of(this.mqttService.connect(connectionOptions));
  }
}
0

There are 0 best solutions below