Http Request auf Node.js Datei
Hallo Zusammen,
wie kann ich eine auf einem Node.js Webserver liegende Scriptdatei ausführen.
Das Heißt ich habe meine index.html und dort soll per Button eine bestimmte Scriptdatei auf dem Server ausgeführt werden.
Diese Scriptdatei schreibt einfach nur Daten aus einer Datenbank in eine JSON-Datei, welche ich dann wiederum über den Browser abrufen kann.
Wenn ich einen Http Request auf diese Datei mache bekomme ich ja nur den Inhalt als String oder XML ausgeben.
Wie kann ich nun diese Datei anstoßen? Das Script an sich funktioniert wenn ich es auf dem Server in der Console ausführe.
MfG
Florian86
wie kann ich eine auf einem Node.js Webserver liegende Scriptdatei ausführen.
Das Heißt ich habe meine index.html und dort soll per Button eine bestimmte Scriptdatei auf dem Server ausgeführt werden.
Diese Scriptdatei schreibt einfach nur Daten aus einer Datenbank in eine JSON-Datei, welche ich dann wiederum über den Browser abrufen kann.
Wenn ich einen Http Request auf diese Datei mache bekomme ich ja nur den Inhalt als String oder XML ausgeben.
Wie kann ich nun diese Datei anstoßen? Das Script an sich funktioniert wenn ich es auf dem Server in der Console ausführe.
MfG
Florian86
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1255971887
Url: https://administrator.de/forum/http-request-auf-node-js-datei-1255971887.html
Ausgedruckt am: 23.12.2024 um 15:12 Uhr
13 Kommentare
Neuester Kommentar
Servus.
Grüße Uwe
// sap.js
// ========
module.exports = {
foo: function () {
// whatever you do here
return somedata;
},
bar: function () {
// whatever you do here
return otherdata;
}
};
// main code
// ...
// load module
var sap = require('./sap');
// execute some functions of external module
var data1 = sap.foo();
var data2 = sap.bar();
Hallo,
mit gefällt da auf die schnelle die Zeile nicht
wenn dann eher
Teste einfach mal den node.js per Webbrowser aufrufen. Da musst du die richtigen Daten bekommen.
Und genau so muss das per JavaScript über den Webseite aufgerufen werden.
mit gefällt da auf die schnelle die Zeile nicht
http.open('GET','sap.js');
wenn dann eher
http.open('GET', 'http://serverip:8080/sap.js');
Teste einfach mal den node.js per Webbrowser aufrufen. Da musst du die richtigen Daten bekommen.
Und genau so muss das per JavaScript über den Webseite aufgerufen werden.
Hallo,
das was du suchst ist ein ajaxCall auf die URL vom Webserver, diesen führst du auf onClick bei deinem Button aus.
https://www.w3schools.com/js/js_ajax_intro.asp
das was du suchst ist ein ajaxCall auf die URL vom Webserver, diesen führst du auf onClick bei deinem Button aus.
https://www.w3schools.com/js/js_ajax_intro.asp
Zitat von @Florian86:
Hallo Colinardo,
ich habe mich vlt. etwas missverständlich ausgedrückt. Ich möchte über meine HTML Seite einen Button klicken welcher
die sap.js serverseitig ausführt.
Ich habe dich schon verstanden, du aber offensichtlich nicht ganz. Hallo Colinardo,
ich habe mich vlt. etwas missverständlich ausgedrückt. Ich möchte über meine HTML Seite einen Button klicken welcher
die sap.js serverseitig ausführt.
Wenn ich das so mache wie du sagst bekomme ich die Meldung das Require im Javascript Kontext nicht definiert ist.
Ist ja auch logisch denn der zweite Code von mir oben gehört in den Server-Teil muss also auf dem Server ausgeführt werden und nicht auf dem Client!! Es ist ja ein wesentlicher Unterschied zwischen Client- und Server-JavaScript.app.use('/',express.static(clientDirectory));
Damit lieferst nur jede Datei "statisch" aus so kann das nie was werden. Also im Server die Funktionen der sap.js ausführen lassen und den Server dynamisch das Ergebnis ausliefern lassen.
Der Ablauf ist folgender:
- Server liefert HTML aus
- Client führt Clientseitiges JavaScript aus das eine Aktion auf derm Server triggert (Aufruf einer speziellen URL via Ajax)
- Server reagiert auf diese spezielle URL mit einem serverseitigen Aufruf deiner SAP Funktionen wie oben gezeigt und liefert das Ergebnis als HTML aus.
- Client JavaScript verarbeitet die vom Server zurückgelieferten Daten und setzt es in das HTML Element.
Hallo,
dir ist aber schon klar das auf dem "Server" die app.js per "node app.js" laufen muss damit du vom "Client" mit o.g. Methoden zugreifen kannst? die app.js über einen Webserver zu Providen wid nicht gelingen...
https://developer.mozilla.org/de/docs/Learn/Server-side/Express_Nodejs
dir ist aber schon klar das auf dem "Server" die app.js per "node app.js" laufen muss damit du vom "Client" mit o.g. Methoden zugreifen kannst? die app.js über einen Webserver zu Providen wid nicht gelingen...
https://developer.mozilla.org/de/docs/Learn/Server-side/Express_Nodejs
Hier mal ein ganz einfaches Beispiel (erweitertes Errorhandling etc. weg gelassen) das du so ausprobieren kannst ohne jetzt explizit die express library zu verwenden damit du verstehst was im Hintergrund abläuft. Das Beispiel inkludiert den HTML-Code der Einfachheit halber im Node Code (macht man natürlich normalerweise nicht, ist nur für das Beipiel).
Zum Testen die index.html des Servers aufrufen:
Server-Code
sap.js
Denke das sollte deinen Knoten nun etwas lösen. Und wie immer ist die Dokumentation dein Freund und Helfer.
Grüße Uwe
Zum Testen die index.html des Servers aufrufen:
http:/server:8000/index.html
.Server-Code
const http = require("http");
const url = require("url");
const host = "0.0.0.0";
const port = 8000;
// include sap.js server side javascript functions
var sap = require('./sap');
// main listener function
const requestListener = function (req,res){
const location = url.parse(req.url,true);
switch(location.pathname){
// base page
case "/index.html":
res.statusCode = 200;
res.setHeader("Content-Type","text/html");
let html = `
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>My Test</title>
</head>
<body>
<script type="text/javascript">
function display(some){
document.getElementById("txt").innerHTML = some;
}
function getFile(mycallback){
let http = new XMLHttpRequest();
http.open('GET','/sap.js');
http.onload = function(){
if(http.status == 200){
mycallback(this.response);
}else {
mycallback("Error" + http.status);
}
}
http.send();
}
</script>
<button type="button" onclick="getFile(display);">Trigger SAP function</button>
<div id="txt"></div>
</body>
</html>
`;
res.end(html);
break;
// called when sap.js is opened by a client request
case "/sap.js":
res.statusCode = 200;
res.setHeader("Content-Type","text/html");
let result = sap.get_sap_data();
res.end(result);
break;
// everything else => 404
default:
res.statusCode = 404;
res.end();
}
};
// create server with listener callback
const server = http.createServer(requestListener);
server.listen(port,host, () => {
console.log(("Server is running on '" + host + "' Port '" + port + "'"));
});
sap.js
// functions which are exposed to public when "required" in other file
module.exports = {
get_sap_data : function(){
// your database code here
return "<strong>Some test data from database</strong>";
}
};
Denke das sollte deinen Knoten nun etwas lösen. Und wie immer ist die Dokumentation dein Freund und Helfer.
Grüße Uwe