Italian community of Lazarus and Free Pascal

Programmazione => Lazarus e il web => Topic aperto da: xinyiman - Novembre 15, 2018, 06:41:52 pm

Titolo: altra versione di web app e problema
Inserito da: xinyiman - Novembre 15, 2018, 06:41:52 pm
Ciao ragazzi, procedo con i miei test per verificare quale modo sia migliore per le mie esigenze per ottenere delle web app con il backend scritto in lazarus e il frontend in html

A questo link trovate il test

www.lazaruspascal.it/esempi/test_web_app.zip

Se lo aprite vedrete che è un webserver embedded mantenuto dai sviluppatori di lazarus. Il buon nomore aveva tradotto anche un articolo al riguardo, a questo link: https://bitbucket.org/nomorelogic/traduzioni/src/abf2ed4363b99939b6ded5b954103ec19775f960?at=master

Ora il mio problema era fare in modo che il programma si caricasse tutto il necessario partendo da dei file esterni all'eseguibile. Quindi AdmiLte e bootstrap sono caricati in una sottocartella chiamata HTML, e poi nel programma principale ho creato un modulo chiamato HTML impostato di default. Poi in unit1 nella DataModuleRequest (qui va cambiato il valore della url := '/Users/ngit/Desktop/test_web_app' + url; con il percorso del vostro sistema operativo) troverete il cuore del mio ragionamento. Così mi aspetto che ogni file richiesto dal browser venga inviato correttamente dal server. Ed infatti invia parecchia roba, ma il risultato a browser non è quello che mi aspetto. Ora basta che compilate, e dal browser provate  a richiamare localhost:8063/HTML/index.html

Ovviamente aprendo il programma da console vedrete i risultati dei miei writeln (log di cosa viene mandato) li sopra. Se avete dubbi chiedete pure, io vorrei riuscire a vedere il file index correttamente. Idee?
Titolo: Re:altra versione di web app e problema
Inserito da: nomorelogic - Novembre 15, 2018, 08:05:55 pm
per dovere di cronaca il documento originale è stato aggiornato e ci sono novità anche interessanti
consiglio a tutti la lettura

https://bitbucket.org/leledumbo/books/downloads/


il progetto è interessante, spero di poter dare un'occhiata (sono sempre ottimista io :D )
Titolo: Re:altra versione di web app e problema
Inserito da: xinyiman - Novembre 16, 2018, 01:44:07 pm
Ho risolto con questo codice

Codice: [Seleziona]
procedure TTFPWebModule1.DataModuleRequest(Sender: TObject; ARequest: TRequest;
  AResponse: TResponse; Var Handled: Boolean);
var
  url: string;
  fine_nome_file: integer;
  f: TFileStream;
  estensione: string;
  ret: boolean;
begin

     ret:=false;

     url := stringReplace(ARequest.URL, '/', System.DirectorySeparator, [RfReplaceAll]);

     if trim(url)<>'' then
     begin
       url := '/Users/francesco/Documents/sw/cgi2test' + url;
       fine_nome_file:=Pos('?',url);
       if fine_nome_file>0 then
       begin
            url:=Copy(url,1,fine_nome_file-1);
       end;
     end;

     if FileExists(url) then
     begin
         writeln('trovato:' + url);
         f := TFileStream.Create(url,fmOpenRead);
         try
           AResponse.Code:=200;
           AResponse.FreeContentStream := False;

           estensione:=ExtractFileExt(url);

           if uppercase(estensione) = '.CSS' then
              AResponse.ContentType := 'text/css;charset=utf-8'
           else
               AResponse.ContentType := 'text/html;charset=utf-8'; // 'application/octet-stream'; //<--questo commentato serve per mandare file al browser
           AResponse.ContentStream := f;
           AResponse.SendContent;
           ret:=true;
         finally
           f.Free;
         end;
     end else begin
         writeln('non trovato:' + url);
     end;
     ret:=true;
     Handled:=ret;
end;

Praticamente sbagliavo il ContentType che per i file css doveva essere specificato diversamente. Una caxxata insomma. Bhe se apportate le modifiche all'esempio avrete anche voi un mini web server embedded per fare le vostre web application.