我无法从服务器端调用客户端功能。我当前在服务器端使用文件监视程序。我想发生的是,当文件被更改时,它将触发一个客户端功能。
来自服务器端的代码
const fs = require( `fs` ),
filewatcher = require('filewatcher');
watcher = filewatcher();
watcher.add(messageBox);
watcher.on('change', function(folder, stat) {
callThisFunction();
});
客户端
中的代码function callThisFunction() {
//insert code here
}
答案 0 :(得分:0)
实际的代码看起来并不像您从后端调用callThisFunction
,而是查找https://socket.io/docs/会有所帮助。
您应该做的是在前端创建一个套接字和该套接字的侦听器。触发该套接字后,您就可以在客户端中运行任何内容。
不良做法:
除了使用套接字,您还可以每秒(setInterval(sendRequest, 1000)
)向服务器发送一个请求,该请求检查后端是否有更新,并且您将以类似{ response: { data: { fireThisFunction: true } } }
的方式进行响应。
我只是提供此解决方案,因为它速度更快,您可能会发现甚至不需要从后端启动功能。
答案 1 :(得分:0)
您可以使用WebSocket将更改从服务器传递到客户端,有效地使用此方法可以在客户端上调用函数。
在本地运行服务器,然后在浏览器中打开index.html。
server.js
const WebSocketServer = require("websocket").server;
const http = require("http");
const filewatcher = require("filewatcher");
const server = http.createServer((request, response) => {
});
server.listen(8080, function() {
console.log("Server is listening on port 8080");
});
webSocketServer = new WebSocketServer({
httpServer: server,
autoAcceptConnections: false
});
let webConn = null;
webSocketServer.on("request", function(request) {
console.log("New Connection...");
const connection = request.accept("some-protocol", request.origin);
webConn = connection;
connection.on("message", function(message) {
if (message.type === "utf8") {
console.log("New Message from client:" + message.utf8Data);
}
});
});
// Start watching directory..
const watcher = filewatcher();
watcher.add("./watch_dir");
watcher.on("change", function(folder, stat) {
console.log("file change:", folder, stat);
if (webConn) {
webConn.sendUTF(JSON.stringify({ folder, stat}));
}
});
index.html
<html lang="en">
<meta charset="utf-8">
<head>
<title>Websocket demo</title>
<script>
console.log("Sending hello..")
const webSocket = new WebSocket("ws://localhost:8080/", "some-protocol");
webSocket.onopen = function (event) {
webSocket.send("Ping from client..");
};
webSocket.onmessage = function (event) {
console.log("Message from server:", event.data);
callThisFunction(event.data);
}
function callThisFunction(data) {
document.getElementById("output").innerHTML += "<br><li>Message from server:" + (data) + "</li>";
}
</script>
</head>
<body>
<div>
<ul id="output">
</ul>
</div>
</body>
</html>