Ich bin neu in Nodejs und Jquery, und ich versuche, ein einzelnes HTML-Objekt mit einem Skript zu aktualisieren. Ich benutze einen Raspberry Pi 2 und einen Ultraschallsensor, um die Entfernung zu messen. Ich möchte kontinuierlich messen und das HTML-Dokument gleichzeitig mit den Echtzeitwerten aktualisieren.Update HTML-Objekt mit node.js und Javascript
Wenn ich versuche, meinen Code auszuführen, verhält es sich wie ein Server und kein Client. Alles, was ich console.log() drucke, wird in cmd und nicht in der Konsole des Browsers ausgegeben. Wenn ich meinen Code jetzt starte, mache ich das mit "sudo node surveyor.js", aber nichts passiert im HTML-Dokument. Ich habe es richtig mit dem Skript verknüpft. Ich habe auch document.getElementsByTagName ("h6") versucht. InnerHTML = distance.toFixed (2), aber der Fehler ist "Dokument ist nicht definiert".
Gibt es einen einfachen Weg, dies zu beheben?
Mein Code so weit ist:
var statistics = require('math-statistics');
var usonic = require('r-pi-usonic');
var fs = require("fs");
var path = require("path");
var jsdom = require("jsdom");
var htmlSource = fs.readFileSync("../index.html", "utf8");
var init = function(config) {
usonic.init(function (error) {
if (error) {
console.log('error');
} else {
var sensor = usonic.createSensor(config.echoPin, config.triggerPin, config.timeout);
//console.log(config);
var distances;
(function measure() {
if (!distances || distances.length === config.rate) {
if (distances) {
print(distances);
}
distances = [];
}
setTimeout(function() {
distances.push(sensor());
measure();
}, config.delay);
}());
}
});
};
var print = function(distances) {
var distance = statistics.median(distances);
process.stdout.clearLine();
process.stdout.cursorTo(0);
if (distance < 0) {
process.stdout.write('Error: Measurement timeout.\n');
} else {
process.stdout.write('Distance: ' + distance.toFixed(2) + ' cm');
call_jsdom(htmlSource, function (window) {
var $ = window.$;
$("h6").replaceWith(distance.toFixed(2));
console.log(documentToSource(window.document));
});
}
};
function documentToSource(doc) {
// The non-standard window.document.outerHTML also exists,
// but currently does not preserve source code structure as well
// The following two operations are non-standard
return doc.doctype.toString()+doc.innerHTML;
}
function call_jsdom(source, callback) {
jsdom.env(
source,
[ 'jquery-1.7.1.min.js' ],
function(errors, window) {
process.nextTick(
function() {
if (errors) {
throw new Error("There were errors: "+errors);
}
callback(window);
}
);
}
);
}
init({
echoPin: 15, //Echo pin
triggerPin: 14, //Trigger pin
timeout: 1000, //Measurement timeout in µs
delay: 60, //Measurement delay in ms
rate: 5 //Measurements per sample
});
Ich verstehe nicht wirklich, warum Sie node.js dafür verwenden ... – frankenapps
Ich schlage vor, Ihr Programm in logische Stücke zu trennen, und dann stellen Sie Ihre Frage zu dem bestimmten Teil, mit dem Sie Hilfe brauchen. Sie werden sicherlich eine bessere Antwort bekommen! – Dave