[英]How to make a REST-API url emit data via Socket.IO?
我是 NodeJS/ExpressJS 和 Socket.io 的新手,我的问题可能听起来很有趣。 就我所经历的 REST-API 和 Socket.io 而言,它们有完整的不同应用程序。
但是如果……
我有一个流 API,它从传感器流式传输数据,现在我将数据保存在数据库中,但除了仅将数据保存在数据库中之外,如果我的 API 在特定路由上获得调用,则还将即将到来的数据流式传输到客户端并将其保存到数据库中,当客户端断开连接时,它只是保存到数据库中,当客户端再次建立连接时,旧的看不见的数据被流式传输,流继续在客户端发出数据。
例如:假设我的rest-api的网址为-
http://:/toWatch
http://:/分析
http://:/showLiveSensersData
现在前 2 个 url 有直接的方法来发送响应。
但是在第三个 url 上,我想通过套接字将数据流式传输到客户端。 现在我的问题是,如果该方法可以,并且可以完成,那么如何完成? 那么我看到的是在expressjs的路由文件中无法访问Socket.io实例。
任何建议和解决方案或帮助将不胜感激。
您可以通过请求对象将 io 实例传递给其他路由。 像这样的东西:
app.use(function(req,res,next){ req.io = io; next(); });
然后使用 req.io 在你的路由中引用它。 不确定以这种方式使用它是否有问题,但我之前已经这样做过并且它已经与 express router 一起使用了。
甚至我都在为您以前遇到的相同功能而苦苦挣扎。 我很困惑如何从传感器的URL中获取响应以及如何返回响应,以便可以将其显示为仪表板上的图表。 您能帮我提供示例代码吗? 但在此之前,请在此处检查我的示例代码。 这是Server.js文件。 我想获得链接变量的动态响应,并将其发送到发出事件。
const express = require('express');
const app = express();
const port = 3000;
var url = require('url');
var fs = require('fs');
const server = require('http').createServer();
var link = "http:www.xample.com/usr/api/data/:deviceId";
server.listen(port,function(){
console.log("Server Listening on port: "+port);
});
const io = require('socket.io')(server);
io.on('connection',function(socket){
setInterval(function(){
socket.emit('date',
{
'date': new Date().getDate(),
'hour': new Date().getHours(),
'minutes': new Date().getMinutes(),
'seconds': new Date().getSeconds()
});
}, 1000);
socket.emit("welcome","Socket Connection is successful!");
});
const iot = require('socket.io-client');
let socket = iot.connect("http://localhost:3000");
socket.on("date",function(data){
console.log(data);
});
socket.on("welcome",function(data){
console.log("Connection Status: ", data);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.