Text som uppdat. löpande m.h.a JS. Hur?

Permalänk

Text som uppdat. löpande m.h.a JS. Hur?

Inlägget rör samma projekt som i min förra tråd. Som sagt, jag är totalt ny på Javascript och för övrigt ganska ovan flödena mellan klient och server men måste ändå fixa jobbet.
Hur som helst, har en html-skapad tabell på klientens monitor däri jag ska skriva ut en resultat-text från ett C-program som ligger och snurrar på servern. Just nu levereras texten i form av en liten textfil på ram-disk (på en Raspberry Pi). En Javascript loop ligger och hämtar textfilen och visar upp den. Där är jag nu. Metodiken känns dock inte rätt. En loop i klienten... Hade tänkt stoppa loop om en viss fil med visst namn dyker upp som betyder "stoppa loop och gå vidare" men det känns tokigt.
Finns nån annan metod att få ut resultatet från C-programmet till webservern och sen vidare til klienten? Jag vill ju använda en vettig metod. Har läst nåt om CGI men gick inte in i djupet. Kanske klarar mig med JS/PHP?

Till saken hör också att jag ska ha en knapp i denna tabell som tar mig tillbaka till föregående meny och sen en annan knapp som registrerar resultatet efter avslutad provning.

Permalänk
Medlem

CGI är 20+ år gammal teknisk som inte löser ditt problem. Det var det man använde när man skrev C-program som skulle svara på HTTP-requests. Det kräver alltså ett anrop från klienten, så du kommer inte undan en loop i klienten. Det fungerar genom att en ny process startar C-programmet med ett gäng fördefinierade miljövariabler satta, som definierar hur anropet till servern gjordes. C-programmet kan läsa miljövariablerna och stdin (där HTTP-bodyn kommer vid POST) och generera svaret på stdout.

Om det handlar om ett hobbyhack med en enda samtidig klient så tycker jag att din lösning duger som den är nu.

Om du vill göra något mer avancerat kan du titta på Websockets. Protokollet låter servern skicka statusuppdateringar och resultat till klienten (typiskt Javascript i webbläsare) när servern tycker att den har tid med det. Javascriptet väntar passivt. Förutsättningen är att Javascriptet först har initierat websocket:en från sitt håll.

Permalänk
Skrivet av KAD:

Om det handlar om ett hobbyhack med en enda samtidig klient så tycker jag att din lösning duger som den är nu.

Behövde höra det där. Alltså att det inte är en optimal väg men den "duger".
Det är inget hobbyhack men ska ändå fungera hyggligt. Ingen avlider dock om den råkar starta om pga nåt hängt sig. Det jag mest är osäker på är om Chromium börjar spöka och säga att "vill du vänta eller avsluta?" då jag ligger i den där loopen.

Det är alltså en Raspberry med touchscreen. På dess skärm visas operatörsgränssnittet vilket drivs av apache/php/C. Orsaken till detta val är flera.

Permalänk
Medlem
Skrivet av Sweedland:

Behövde höra det där. Alltså att det inte är en optimal väg men den "duger".
Det är inget hobbyhack men ska ändå fungera hyggligt. Ingen avlider dock om den råkar starta om pga nåt hängt sig. Det jag mest är osäker på är om Chromium börjar spöka och säga att "vill du vänta eller avsluta?" då jag ligger i den där loopen.

Det är alltså en Raspberry med touchscreen. På dess skärm visas operatörsgränssnittet vilket drivs av apache/php/C. Orsaken till detta val är flera.

Jag rekommenderar att du använder en schemaläggare istället för en loop (for/while). Detta för att loopar i JavaScript kan låsa gränssnittet och käka datorkraft i onödan.

function updateFunction() { // hämta data, uppdatera om det behövs } window.setInterval(updateFunction, 1000) // där 1000 är antalet millisekunder mellan varje koll

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Skrivet av Teknocide:

Jag rekommenderar att du använder en schemaläggare istället för en loop (for/while). Detta för att loopar i JavaScript kan låsa gränssnittet och käka datorkraft i onödan.

function updateFunction() { // hämta data, uppdatera om det behövs } window.setInterval(updateFunction, 1000) // där 1000 är antalet millisekunder mellan varje koll

Lustigt du nämner detta. Jag är inne på precis det där ämnet just nu. Browsern uppdateras inte som jag vill. Har förstått att det är en trix att fixa detta. Jag stupar dock på grundkursen (som jag inte gått) som säkert berättar hur javan exekveras.
Denna 'setInterval' tycks köra på och loopa tills man gör en clear. updateFunction körs i en egen process har jag också lärt mig (den hårda vägen).

edit: Det funkar....nästan. Problemet är nu att inläst fil (som ska presenteras i tabellens ena cell vilken den också gör) cachas så jag måste göra en manuell rensning av browserns cache. Måste kolla vad Java har att erbjuda....

edit2:
Det verkar som om jag måste ha annat namn på den fil som ska läsas och visas upp. Det är för att inte cachen ska behålla den.
Har läst lite om hur man "bypassing the cache". Låter lite knöligt men har provat det mesta..

Permalänk
Medlem
Skrivet av Sweedland:

Lustigt du nämner detta. Jag är inne på precis det där ämnet just nu. Browsern uppdateras inte som jag vill. Har förstått att det är en trix att fixa detta. Jag stupar dock på grundkursen (som jag inte gått) som säkert berättar hur javan exekveras.
Denna 'setInterval' tycks köra på och loopa tills man gör en clear. updateFunction körs i en egen process har jag också lärt mig (den hårda vägen).

edit: Det funkar....nästan. Problemet är nu att inläst fil (som ska presenteras i tabellens ena cell vilken den också gör) cachas så jag måste göra en manuell rensning av browserns cache. Måste kolla vad Java har att erbjuda....

edit2:
Det verkar som om jag måste ha annat namn på den fil som ska läsas och visas upp. Det är för att inte cachen ska behålla den.
Har läst lite om hur man "bypassing the cache". Låter lite knöligt men har provat det mesta..

Det är servern som bestämmer om materialet ska cachas. Du borde t ex kunna sätta headern Cache-control: no-store när filen returneras, men du kan också göra en fuling genom att lägga på current timestamp på querysträngen, dvs från JavaScriptet hämtar du något i stil med https://server.se/fil.txt?q=123152512, där värdet på ?q=-parametern sätts till (new Date()).getTime().

setInterval loopar inte per definition; istället säger den hur ofta en funktion ska köras. Lite som en prenumeration. Också värt att veta är att detta inte är Java, utan JavaScript; två helt olika programmeringsspråk

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Skrivet av Teknocide:

Det är servern som bestämmer om materialet ska cachas. Du borde t ex kunna sätta headern Cache-control: no-store när filen returneras, men du kan också göra en fuling genom att lägga på current timestamp på querysträngen, dvs från JavaScriptet hämtar du något i stil med https://server.se/fil.txt?q=123152512, där värdet på ?q=-parametern sätts till (new Date()).getTime().

setInterval loopar inte per definition; istället säger den hur ofta en funktion ska köras. Lite som en prenumeration. Också värt att veta är att detta inte är Java, utan JavaScript; två helt olika programmeringsspråk

Jag har provat detta med headers i html-delen (och även ett script i PHP) men inget av detta funkar. Det är när jag manuellt rensar browserns cache med avseende på "filer" som den läser in en ny aktuell fil. Det var då jag började titta på "bypassing" av cachen.
Eftersom server och klient går på samma dator så tänker jag att C-programmet som skapar dessa återkommande små textfiler för presentation får ett filnamn som är exempelvis "visa200404090215.txt" (precis som du är inne på). Eftersom JS läser samma klocka så bör den veta vad filen ska heta just då den kör funktionen LoadFile(). Jag tittade för övrigt på hur JS läser en folder på servern och det såg drygt ut. Tanken var då att använda ett random nummer som filnamnsändelse. Jag valde alltså en annan väg.

Ja. Jag vet att Java är annat än Javascript. jag var lite lat. Kanske JS är bättre för de lata. Det jag däremot har problem med är skillnaden mellan Ajax och JQueary etc. Den grundkursen har jag inte gått. Kanske jag ska be chefen om en kurs när denna virus-epidemi har gått över. Jag börjar dock fatta att en browser ska man ha respekt för. Det är en riktigt häftig källkodstolkare. Det inser man när man mixar <div> med <td> och hit o dit samt mitt i blandar in PHP och <script>. Jag är imponerad av att de lyckats.

Permalänk

Har du uppdaterad källkod som man kan titta på? Har lite svårt att hänga med i vad problemet är just nu

Visa signatur

Wooaaaaaaah!!!

Permalänk
Skrivet av Criticalstone:

Har du uppdaterad källkod som man kan titta på? Har lite svårt att hänga med i vad problemet är just nu

Denna kod innehåller rester av tester och prototypande av en newbee på åtminstone JS så det finns nog förbättringspotential. Som sagt, problemet är att loadFile() inte reagerar på att filen har uppdaterats förrän jag rensar browserns cache (verkar det som).

Hur som helst, 'visa.txt' har jag tänkt döpa om till visa[datum-tid].txt här i JS-scriptet och jag gör samma sak på den C-rutin som skapar visa.txt filen. Då bör cachen inte påverka funktionen.

//const form = document.querySelector('form') window.setInterval(getFile, 1000) //Denna rad driver runt allt som jag fattat det. var i; var w = ""; function getFile() { w=loadFile('/rmdsk/visa.txt'); if(w.length > 3) { console.log(w.length); document.getElementById("lista_ut").innerHTML = loadFile('/rmdsk/visa.txt');; deleteFile('/rmdsk/visa.txt'); } //end if } //end func //***************************************************** function loadFile(filePath) { var result = null; var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", filePath, false); xmlhttp.send(); if (xmlhttp.status==200) { result = xmlhttp.responseText; } return result; } //***************************************************** function deleteFile(file_name) { // GET DATA var data = new FormData(); data.append("var_a", file_name); var xhr = new XMLHttpRequest(); xhr.open('POST', "delete.php", true); xhr.onload = function () { var res = JSON.parse(this.response); if (res.status) { //console.log(res.message); //alert(res.message); } else { //console.log(res.message); //alert(res.message); } }; xhr.send(data); return false; }

<!DOCTYPE html> <html lang="sv"><head> <!-- <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge" content="no-cache"> --> <title>Upload Files</title> <!-- <meta http-equiv='cache-control' content='no-cache'> <meta http-equiv='expires' content='0'> <meta http-equiv='pragma' content='no-cache'> --> <meta "Expires: Tue, 01 Jan 2000 00:00:00 GMT"> <meta "cache-Control: no-store, no-cache, must-revalidate, max-age=0"> <meta "cache-Control: post-check=0, pre-check=0"> <meta "Pragma: no-cache"> <script src="clear_cache.php"></script> <style> table#t01 { table-layout:fixed; border: 2px solid blue; cellpadding: 2; cellspacing: 2; text-align: left; height: 480px; width: 800px; } td { border: 1px solid black; vertical-align: top; } </style> </head> <body> <table id="t01"> <tbody> <!-- rad 1 --> <tr> <form method="post" enctype="multipart/form-data"> <!-- col 1 --> <td style="width:400px;"> <br><br> <!-- <input style="width: 400px; height: 62px;" name="files[]" multiple="" type="file"> --> &nbsp; <br><br><br> <input style="width: 100px; height: 62px;" value="Upload File" name="testknapp" type="submit"> <br><br> </td> <!-- col 2 --> <td style="width:400px;"> <div id="lista_ut" style="width:400px; height:400px; overflow-y:scroll; "></div> </td> </form> </tr> <!-- rad 2 --> <tr> <!-- col 3 --> <td style="vertical-align: top; height: 72px; width:400px;"> <form action="kablego_skicka.html"> <input style="width: 100px; height: 62px;" value="Tillbaka" name="tillbaka" type="submit"> </form> </td> <td colspan="2" style="vertical-align: top; width: 400px; height: 72px;"><br> </td> </tr> </tbody> </table> <br> <br> <script src="testing_v2.js"></script> </body></html>

<?php include('defines.php'); include('php_func.php'); $f = "/var/www/html".$_POST['var_a']; if(file_exists($f)) { shell_exec("sudo rm ".$f ); // unlink($_GET['file']); while(file_exists($f)) ; clearstatcache(false,$f); logg("Tog bort filen ".$f); } $pass=true; // RESULT echo json_encode([ "status" => $pass ? 1 : 0, "message" => $pass ? "OK!" : "An error has occured" ]); ?> <?php include('defines.php'); include('php_func.php'); header("Expires: Tue, 01 Jan 2000 00:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); logg("Rensar cache"); ?>

Permalänk
Medlem
Skrivet av Sweedland:

Denna kod innehåller rester av tester och prototypande av en newbee på åtminstone JS så det finns nog förbättringspotential. Som sagt, problemet är att loadFile() inte reagerar på att filen har uppdaterats förrän jag rensar browserns cache (verkar det som).

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpReque...

Permalänk

Informationen i den länken (läst den tidigare - och även andra) gjorde att jag insåg jag behövde ett tal som ändrar sig hela tiden och som adderas på, på filnamnet. Jag testade med detta. Det visar sig fungera bra.

f = "/rmdsk/visa"; f = f.concat(secs.toString()); f = f.concat(".txt"); w=loadFile(f);

Permalänk
Medlem

Jag antar att detta inte är en publik server och jag förstår att koden är under utveckling, men du bör känna till att som PHP-koden ser ut just nu är den sannolikt sårbar för Path Traversal/File Inclusion och potentiellt även Remote Code Execution/Code Inection.

Detta eftersom $_POST['var_a'] går direkt till shell_exec(). Så om man, exempelvis skickar in "../../../../../../etc/passwd" så tas "databasen" med användare på servern bort. Jag skulle inte räkna med att file_exists() är tillräckligt för att skydda mot RCE.

Du kan läsa mer om hur man bör genomföra indatavalidering här.

Vidare ser det ut som att PHP skickar dina anti-cache headers _efter_ att data redan skickats till klienten. Headrarna måste skickas först för att ha någon effekt. Gissar att det står någonting i stil med "headers already sent" om du kollar i server-loggarna. En workaround för cache-frågan (som jag tror någon redan föreslagit?) någonting i stil med xhr.open('POST', "delete.php?" + (new Date()).getTime(), true); skulle kanske fungera.

Permalänk
Skrivet av felplacrd:

Jag antar att detta inte är en publik server och jag förstår att koden är under utveckling, men du bör känna till att som PHP-koden ser ut just nu är den sannolikt sårbar för Path Traversal/File Inclusion och potentiellt även Remote Code Execution/Code Inection.

Detta eftersom $_POST['var_a'] går direkt till shell_exec(). Så om man, exempelvis skickar in "../../../../../../etc/passwd" så tas "databasen" med användare på servern bort. Jag skulle inte räkna med att file_exists() är tillräckligt för att skydda mot RCE.

Du kan läsa mer om hur man bör genomföra indatavalidering här.

Vidare ser det ut som att PHP skickar dina anti-cache headers _efter_ att data redan skickats till klienten. Headrarna måste skickas först för att ha någon effekt. Gissar att det står någonting i stil med "headers already sent" om du kollar i server-loggarna. En workaround för cache-frågan (som jag tror någon redan föreslagit?) någonting i stil med xhr.open('POST', "delete.php?" + (new Date()).getTime(), true); skulle kanske fungera.

Du har rätt på fler punkter. Just denna applikation är inte i skadlig miljö men har andra installationer. En av mina ToDo:s är just att skydda koden bättre. Nu ansluts de andra servers m.h.a VPN av kunden och har god säkerhet men jag ändå bättra på koden med självklara säkerhetsåtgärder - som ex.vis sanitize (eller vad det nu heter?) på inmatningsfält. Jag ska därför kolla länken och googla lite mer. Jag är i en lärande fas..

Din iakttagelse ang. headers är helt korrekt. Vad jag undrar över är när "headers"-inverkar är slut och konsumerat? Är det när man stänger browsern eller när man skickar nån anti-headers och sen börjar om med en ny?

Permalänk
Medlem
Skrivet av Sweedland:

Jag ska därför kolla länken och googla lite mer. Jag är i en lärande fas..

Utmärkt! Jag var medvetet ganska kortfattad i och med att säkerhetsfrågorna kändes lite off-topic för just denna tråd. Men nu har du uppmärksammat det och vi kan återkomma till det i en annan tråd.

Skrivet av Sweedland:

Din iakttagelse ang. headers är helt korrekt. Vad jag undrar över är när "headers"-inverkar är slut och konsumerat? Är det när man stänger browsern eller när man skickar nån anti-headers och sen börjar om med en ny?

Det finns request- och response-headrar och de skickas med i varje anrop mellan klient och server. Det finns inget kort svar då headrar i princip är en hel vetenskap och olika headrar fungerar på olika sätt. Ta set-cookie headern som exempel (Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit>). Bara "max-age"-direktivet (som är ett av många) instruerar klienten om att denna header inte ska vara "färdigkonsumerad" förrän webbläsaren stängs. Medan en annan header, säg Content-Length, konsumeras direkt, så att säga. Det vill säga så fort klienten hanterat serversvaret.

Så, det finns ingenting som heter anti-headers. När jag skrev anti-cache i föregående inlägg syftade jag på din påbörjade implementation av hur PHP-scriptet skickar med instruktioner om hur webbläsaren ska cacha de olika requestsen. Just cache-headrar är ju intressanta att diskutera utifrån ett "konsumtionhänseende" eftersom att om applikationen vid ett första anrop svarat (som exempel, alltså) "allt-ska-cachas-för-alltid" så kan det krävas rejäla grepp för att tvinga klienten att glömma dessa cache-inställningar och läsa in nya instruktioner (som, exempel) "cacha-aldrig-någonting". Detta kan förstås ställa till det och skapa huvudbry under utveckling. Så det kan vara en god idé att använda incognito/privata flikar och "Developer Tools" -> Network i sin webbläsare under utveckling. I Firefox, t ex, finns en inställning för "Disable HTTP cache" som kan vara till hjälp när man felsöker.

Edit: För att vara tydlig, vad jag menade med "headrarna måste skickas först" var alltså att du i ditt PHP-script inte först kan skicka "response-data" (dvs själva innehållet på sidan som ska visas, t ex med echo, print, include(), etc) och SEDAN använda header(). Se till att alla header()-funktioner körs först så skall den biten vara löst.

Permalänk
Skrivet av felplacrd:

Edit: För att vara tydlig, vad jag menade med "headrarna måste skickas först" var alltså att du i ditt PHP-script inte först kan skicka "response-data" (dvs själva innehållet på sidan som ska visas, t ex med echo, print, include(), etc) och SEDAN använda header(). Se till att alla header()-funktioner körs först så skall den biten vara löst.

Kom över ett stycke text som var träffande:
"One of the common reason of such error is directly starting with jQuery without knowing JavaScript fundamentals. I have seen many web developers which comes from Java, C#, HTML, and Python background, started using jQuery without knowing much about JavaScript."

Det jävliga är att jag inte vet om jag behöver JQuery eller inte. Så illa är det. Men en del exempel jag googlar använder det och...

edit: Jag har faktiskt fått nåt att leva nu. Folderns filer hämtas upp nu men kommer upp som en snygg "folder-view" i browsern. Pga min ringa kunskap om JS så vet jag inte exakt hur jag ska få tag i en fil (i nån array) som heter visa*.txt. Alltså, det ska finnas en fil som ex.vis heter visa452235.txt. Nästa gång heter den visa88234234.txt. När scriptet hittat visa*.txt så visas den upp browsern och sen tas bort.
Eftersom scriptet anropas varje sekund så läses foldern av varje sekund (inte många filer).
Vad jag förstår av funktionen getnames() så läser den vad "response" hämtat och visat upp (i Browsern). Jag får labba lite. Och under helgen ska jag läsa en grundkurs. haha

edit 3:
Jag gjorde en response.search("visa"). Därifrån kan jag lista ut visa-namnet.

//Script som körs innan fil läses in och visas upp... $.get("/rmdsk",function(response) { document.write(response); getNames(); }); function getNames() { var files = document.querySelectorAll("a.text.file"); var folders = document.querySelectorAll("a.icon.dir"); files.forEach(function(item){filenames.push(item.textContent)}) folders.forEach(function(item){foldernames.push(item.textContent.slice(0,-1))}) console.log(filenames); console.log(foldernames); }

Permalänk
Medlem

jQuery (eller andra ramverk) kan effektivisera och förenkla uveckling i och med att de - bland annat - förenklar användning av JS-funktioner. Men, i grund och botten är det fortfarande vanlig JS. För att hämta data och dynamiskt byta ut innehållet på en sida tycker jag inte du behöver jQuery.

Jämför dessa två exempel. Som du ser blir det inte så mycket "enklare" med jQuery.

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <!-- Start "Vanilla"/plain JavaScript Ajax request example --> <div id="vanillaAjax-response"><p>vaillaAjax response goes here</p></div> <button onclick="vanillaAjax()">vanillaAjax</button> <script> function vanillaAjax() { let xhr = new XMLHttpRequest(); xhr.open('GET', './some-service', true); xhr.onload = function () { document.getElementById("vanillaAjax-response").innerHTML = xhr.response; }; xhr.send(); } </script> <!-- End --> <!-- Start jQuery Ajax request example --> <script src="https://code.jquery.com/jquery-3.4.1.js"></script> <div id="jQueryAjax-response"><p>jQueryAjax response goes here</p></div> <button onclick="jQueryAjax()">jQueryAjax</button> <script> function jQueryAjax() { jQuery.get("./some-service", function(response) { document.getElementById("jQueryAjax-response").innerHTML = response; }); } </script> <!-- End --> </body> </html>

Permalänk
Skrivet av felplacrd:

jQuery (eller andra ramverk) kan effektivisera och förenkla uveckling i och med att de - bland annat - förenklar användning av JS-funktioner. Men, i grund och botten är det fortfarande vanlig JS. För att hämta data och dynamiskt byta ut innehållet på en sida tycker jag inte du behöver jQuery.

Jag förstår. Det är min googling som leder in mig på jQuery.
Mina målobjekt som jag jobbar med har fokus på hårdvaran. Browser<->server<->hårdvara. Aldrig snygga tabeller och fancy design i browsern. Oftast att en knapptryckning leder till nåt - i detta fall en textfil som är resultat av en bearbetning i hårdvaran. Funktion prior design.
I mitt googlande så har jag träffat på node.js. Nåt du känner igen?

Permalänk
Medlem

@Sweedland: Jag har inte använt NodeJS jättemycket själv, så lite sökande eller input från någon annan medlem vore nog bra! Men, jag ser NodeJS som "JavaScript, fast server-side" (jmf med traditionell client-side som vi pratat om hittills). NodeJS kan fungera som en HTTP-server OCH exekvera systemkommandon. Så, om du ville skulle du kunna ut både din webbserver och PHP mot NodeJS.

Notera dock att det inte räcker med NodeJS "script-filer", du måste installera NodeJS på servern också -- Så du har en binär som kan exekvera/hosta NodeJS-applikationen.

Men de problem du har stött på/kommer stöta på framgent löses inte automagiskt för att du byter till NodeJS. Om jag var du skulle jag gjort färdigt "version 1" av applikationen du har nu med Webbserver, PHP och JavaScript. Och när den är klar kan du göra "version 2" eller någon annan applikation i NodeJS (eller Python, eller Golang, eller, eller, eller ...).

Permalänk

Med avseende på tidigare svar så vill jag bara flika in att python är ett ypperligt språk att börja lära sig programmering med. Det är väldigt enkelt, finns mycket dokumentation och används väldigt mycket i industrin. Kan användas som webserver men också för random lokala scripts, dock inte som "client side" i webläsaren som javascript primärt är till för.

Så om du känner för att byta server-sida senare tycker jag att python är ett bra alternativ. Sen är säkert node.js bra om du nu redan kan lite javascript.

Visa signatur

Wooaaaaaaah!!!

Permalänk
Skrivet av felplacrd:

@Sweedland: Jag har inte använt NodeJS jättemycket själv, så lite sökande eller input från någon annan medlem vore nog bra! Men, jag ser NodeJS som "JavaScript, fast server-side" (jmf med traditionell client-side som vi pratat om hittills). NodeJS kan fungera som en HTTP-server OCH exekvera systemkommandon. Så, om du ville skulle du kunna ut både din webbserver och PHP mot NodeJS.

Notera dock att det inte räcker med NodeJS "script-filer", du måste installera NodeJS på servern också -- Så du har en binär som kan exekvera/hosta NodeJS-applikationen.

Men de problem du har stött på/kommer stöta på framgent löses inte automagiskt för att du byter till NodeJS. Om jag var du skulle jag gjort färdigt "version 1" av applikationen du har nu med Webbserver, PHP och JavaScript. Och när den är klar kan du göra "version 2" eller någon annan applikation i NodeJS (eller Python, eller Golang, eller, eller, eller ...).

Ja. Den app jag jobbar med nu blir med JS. Inte nåt annat. Varför jag nämner node.js är att Raspberry och node.js verkar gilla varandra. Det kan användas som ett komplement framöver. Som jag tidigare sade så är jag inte i grunden en "designa-websida-för-användare" programmerare. Jag jobbar en hel del med den hårda sidan och browser+server+bra utv.miljö kan bli en bra combo för browsern finns lite överallt. Speciellt i en RPI. Där kan ev. node.js göra nytta.
MEN...jag måste gå en grundkurs i Javascript och överhuvudtaget allt som rör server+klient.

Permalänk
Skrivet av Criticalstone:

Med avseende på tidigare svar så vill jag bara flika in att python är ett ypperligt språk att börja lära sig programmering med. Det är väldigt enkelt, finns mycket dokumentation och används väldigt mycket i industrin. Kan användas som webserver men också för random lokala scripts, dock inte som "client side" i webläsaren som javascript primärt är till för.

Så om du känner för att byta server-sida senare tycker jag att python är ett bra alternativ. Sen är säkert node.js bra om du nu redan kan lite javascript.

Jag har testat några python-snuttar och det är ett kraftfullt språk. Lite annorlunda syntax men det finns säkert en tanke bakom det. Det som hindrar mig är att jag når mina mål ialla fall med de verktyg jag redan har eller håller på och införskaffa mig. Kan dock bli tvungen framöver o lära mig Python också. Ialla fall så pass så jag kan leverera i tid och alla är nöjda..