我正在尝试设置一个 Node.js 应用程序,该应用程序将在 ping IP 时在前端提供一个 HTML 页面。最终结果将有望成为一个静态网页,该网页将显示被 ping 的 IP 的状态。
我的 HTML 页面使用 Express 运行得很好。它基本上只是一个静态文件,其中<a>
的文本和颜色由外部脚本更改。暂时,我有一个按钮来切换显示的状态,到目前为止它看起来不错。
问题是,如何根据从Pinger
(如下所述)获得的结果更新 HTML?
我有两个 Node.js 源文件。显然,主要的是server.js
:
var express = require("express"),
app = express(),
Pinger = require("./pinger");
app.use(express.static(__dirname));
console.log("Using static files at /");
app.use("/styles", express.static(__dirname + '/styles'));
console.log("Using stylesheets at /styles");
app.use("/res", express.static(__dirname + '/res'));
console.log("Using resources at /res");
app.listen(3000);
console.log("Listening on port 3000");
var pinger = new Pinger('google.com'); /* how the instance would be created */
还有Pinger
模块:
var ping = require('ping');
var Pinger = function() {
this.host = arguments.length > 0 ? arguments[0] : 'google.com';
this.isOnline = false;
this.pingAll = function pingAll() {
console.log(">>PING: " + host);
ping.sys.probe(host, function(isAlive) {
if (isAlive) console.log(">>PONG: " + host);
else console.log("Unable to reach " + host);
});
// somehow return isAlive
};
};
module.exports = Pinger;
显然,现在,pingerisOnline
只能是假的,因为它从未更新过。
附带说明一下,我如何能够从ping.sys.probe
回调内部更新 isOnline ?我知道不同的范围,而且我很确定仅仅使用this.isOnline = isAlive
是没有用的,因为它this
会引用回调(除非我一开始就错了并且想多了)。