У меня есть приложение node js, которое получает данные от сенсорного устройства через запросы POST. Он также служит интерфейсом для мониторинга этих данных. Я хочу, чтобы он отправлял обновления данных через websocket всем подключенным клиентам
Вот что я придумал:
const express = require('express');
const app = express();
const expressWs = require('express-ws')(app);
const ws = expressWs.getWss('/ws');
function sendAll(data) {
ws.clients.forEach(function each(client) {
client.send(JSON.stringify(data));
});
}
setInterval(async () => {
try {
let message = { message: 'dataUpdated', data: { foo: 'bar } };
sendAll(message);
} catch (err) {
console.error(err);
}
}, 1000 * 5);
app.use(express.static('./static/'));
// tell the app to parse HTTP body messages
app.use(bodyParser.json());
// routes
const apiRoutes = require('./api/routes/api-routes');
app.use('/api', apiRoutes);
module.exports = app;
Я могу использовать функцию sendAll
для трансляции данных. Но я хотел бы также иметь возможность использовать эту функцию внутри apiRoutes
, где я обрабатываю входящие запросы от датчика. Как я могу передать его туда, или, возможно, получить доступ к экземпляру expressWs
и создать ту же функцию во включенном файле api-routes
?