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));
}
}