Application
Application instance
Module ID
Module logger
Module name
Connected sockets
Endpoints of the Module
Returns the init promise to know if the module init is done or not
Name of the module
Should the Application wait for the Module to initialize
Add an endpoint to the module endpoints
Endpoint to add
addEndpoint(myEndpoint)
Add multiple endpoints
addEndpoints([ endpoint1, endpoint2, ... ])
Handle /getMyFoodMeasures GET route: Get records stored in the database from my food API
Query parameters:
- since
- until <timestamp> (facultative) - UNIX timestamp of an UTC value that correspond to the maximum date of the measure
eg: /getMyFoodMeasures?until=1618320417 (search for entries before date 2021-04-13T13:26:57.000Z)
/getMyFoodMeasures?since=1618319759?until=1618320417 (search for entries between dates 2021-04-13T13:15:59.000Z and 2021-04-13T13:26:57.000Z)
sensors
eg: /getMyFoodMeasures&sensors=ph,humidity (only get the ph and humidity sensors values)
Response: [
{
"_id": "60759916f7603e3dcd86b779",
"captureDate": "2021-04-13T13:11:46.577Z",
"value": 33.6,
"sensor": "humidity",
"__v": 0
},
{
"_id": "60759916f7603e3dcd86b776",
"captureDate": "2021-04-13T13:11:46.577Z",
"value": 8.4,
"sensor": "ph",
"__v": 0
}
]
sort <[-]sort1>,<[-]sort2>,... (facultative) - List of ordered fields to sort by (put a "-" before a field name to sort descending) eg: /getMyFoodMeasures?sort=value (order results by value) eg: /getMyFoodMeasures?sort=-sensor,value (order results by sensor name DESC and then by value ASC)
limit
Response: MeasureSchema[]
const lastMeasures = await fetch('/getMyFoodMeasures&limit=6')
.then((res) => res.json())
if(!lastMeasures.error) {
console.log(lastMeasures) // [ { sensor: '...', captureDate: ..., value: ... }, { sensor: '...', captureDate: ..., value: ... }, ... ]
}
Get all the reachable unregistered records from MyFood API and save them to the database
If autoInit is set on true, will run the init async method and put the result of the Promise in a variable that can be get by the application. This will allow the Application to be notified at the end of the init method of the Module If autoInit is set on false, will just put a Promise.resolve() in the init variable
Should the Application run the init method
initialize(true/false)
Listener for new client socket connection
Client socket
// Application
onSocketJoin((socket) => {
this._modules.forEach((module) => {
module.onSocketJoin(socket)
})
})
// MyModule
public onSocketJoin(socket) {
console.log(`Socket ${socket.id} joined`)
}
// index.ts
const app = new Application({...})
...
app.registerModule(MyModule)
...
// When a socket joins the server
// console: "Socket xZicnuePG5WehCSKAAAB joined"
Listener for disconnected client sockets
Client socket
// Application
onSocketJoin((socket) => {
...
socket.on('disconnected', (socket) => {
this.modules.forEach((module) => {
module.onSocketLeave(socket)
})
})
})
// MyModule
public onSocketLeave(socket) {
console.log(`Socket ${socket.id} leaved`)
}
// index.ts
const app = new Application({...})
...
app.registerModule(MyModule)
...
// When a socket leaves the server
// console: "Socket xZicnuePG5WehCSKAAAB leaved"
Register a task
Schedule of the task: Date, Moment or cron schedule
Action the will be run on schedule
Does auto start (default: true)
The task
export class MyModule extends Module {
constructor(app: Application) {
...
// Perform task every day at 10h00
this.registerTask('* * 10 * * *', this.performMyTask.bind(this), true)
}
public async performMyTask() {
...
}
}
Set the wait flag to the given value
New wait flag value
setWait(true/false)
Fetch the MyFood public API to get the latest sensor records, store them in the database, and notify the new values to the users through sockets
The new records
Generated using TypeDoc
Allow measures fetching and allow the client to ask for the measures