43 lines
2.1 KiB
Plaintext
43 lines
2.1 KiB
Plaintext
/**
|
|
* Template Socket.IO `use` middleware for uibuilder. Fn will be called for EVERY inbound msg from a client to Node-RED/uibuilder.
|
|
* UPDATED: 2022-04-01
|
|
*
|
|
* NOTES & WARNINGS:
|
|
* 1) This function is called when a client sends a "packet" of data to the server.
|
|
* 2) Failing to either return or call `next()` will mean that your clients will never be able to get responses.
|
|
* 3) You can amend the incoming msg in this middleware.
|
|
* 4) An error in this function will probably cause Node-RED to fail to start at all.
|
|
* 5) You have to restart Node-RED if you change this file.
|
|
* 6) If you call `next( new Error('blah') )` The error is sent back to the client and further proessing of the incoming msg stops.
|
|
* 7) To use for authentication/authorisation with Express and sio connection middleware, create a common node.js module.
|
|
*
|
|
* Allows you to process incoming data from clients.
|
|
*
|
|
* see: https://socket.io/docs/v4/server-api/#socketusefn
|
|
* see also: uibRoot/.config/sioMiddleware.js & sioMsgOut.js
|
|
* and https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html#websocket-implementation-hints
|
|
*
|
|
* @param {[string,Array<Object>]} data The channel name (strictly the event name) and args send by a client (Socket.IO calls it a "packet"). data[0] is the channel/event name, data[args][0] is the actual msg
|
|
* @param {function} next The callback to hand off to the next middleware
|
|
*/
|
|
function sioUseMw([ channel, ...args ], next) {
|
|
|
|
const msg = args[0]
|
|
|
|
console.log('[uibuilder:Socket.IO:sioUse.js] msg from client: ', 'Channel Name:', channel, ' Msg:', msg)
|
|
|
|
// Simplistic error example - looking for specific property on the inbound msg
|
|
if ( msg.i_am_an_error ) {
|
|
// The error is sent back to the client and further processing of the msg stops
|
|
next(new Error('Oops! Some kind of error happened'))
|
|
return
|
|
}
|
|
|
|
// You can amend the incoming msg
|
|
msg._test = 'added by sioUse.js middleware'
|
|
|
|
next()
|
|
|
|
} // Do not forget to end with a call to `next()` or clients will not be able to connect
|
|
|
|
module.exports = sioUseMw |