我正在尝试设置一个 Node.js 应用程序,该应用程序将在 ping IP 时在前端提供 HTML 页面。最终结果有望是一个静态网页,显示正在 ping 的 IP 的状态。
我使用 Express 使 HTML 页面运行得很好。它基本上只是一个带有单个 <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;
显然,现在 pinger 的 isOnline
只能是 false,因为它从未更新。
顺便说一句,我如何能够从 ping.sys.probe
内部更新 isOnline打回来?我知道不同的范围,并且我很确定只需使用 this.isOnline = isAlive
毫无用处,因为 this
会引用回调(除非我一开始就错了并且想得太多)。
最佳答案
您需要切换到模板引擎并使页面动态化。您回调可以使用已完成的模板调用 res.send/res.end 函数,该模板将被推送回客户端。检查jade或coffeekup,如果它简单的话只需在函数中构建html而不是使用外部模板。
关于javascript - 使用node.js通过外部脚本更新HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15212569/