ich war Krankheitsbedingt eine ganz ganz ganz lange Weile nicht mehr hier. Doch so langsam wird es mal wieder Zeit ^^
Ich arbeite Momentan an einem Framework, welches die Arbeit mit FastCGI deutlich erleichtern soll. Ich habe noch nicht lange daran gearbeitet, bin aber mit den ersten Ergebnissen schon sehr zufrieden. Zuerst habe ich das Routing implementiert und das erfassen des Requestbodys bzgl. Formulardaten umgesetzt. Das Framework soll allerdings noch viel viel größer werden und neben dem Kernmodul auch viele Nebenläufige Module bekommen.
Den Code zusammen mit einem Beispiel sowie Screenshots gibt es bei Github: https://github.com/reVerBxTc/PBExpress
Hier ein Examplacode für die Nutzung:
Code: Alles auswählen
; ---- Load The Framework ---- ;
IncludeFile "pbexpress.pb"
; ---- Init CGI ---- ;
If Not InitCGI()
End
EndIf
; ---- Init FastCGI ---- ;
If Not InitFastCGI(2005)
End
EndIf
; ---- A Demonstration Page-Procedure ---- ;
Procedure DefaultTest(Map Request.s(),Map Post.s())
WriteCGIHeader(#PB_CGI_HeaderContentType, "text/html", #PB_CGI_LastHeader)
ReturnStr.s = "<h2>Header-Data</h2><pre>"
ForEach Request()
ReturnStr + MapKey(Request()) + ": " + Request() + "<br>"
Next
ReturnStr + "</pre>"
If MapSize(Post()) > 0
ReturnStr + "<h2>Post-Data</h2><pre>"
ForEach Post()
ReturnStr + MapKey(Post()) + ": " + Post() + "<br>"
Next
ReturnStr + "</pre>"
EndIf
WriteCGIStringN(ReturnStr)
EndProcedure
; ---- The PBExpress Options ---- ;
PBExpress::SetDefaultPage(@DefaultTest()) ; Set Default Page-Procedure
PBExpress::AddRouteKey("mod") ; Set a Parameterkey for Routings
PBExpress::AddRouteKey("action") ; A Second one
PBExpress::AddRoute("mod=users&action=view",@DefaultTest()) ; Create a Route with Values to the defined Keys (In the Routingtable the Pointer saves under the combined Values ex. usersview)
PBExpress::RunServer() ; Execute the Server
Get:
Post:
Das ganze ist übrigens noch nicht für die Nutzung im Produktivbetrieb geeignet. Ich stehe noch ganz ganz weit am Anfang. Trotzdem wollte ich das bisherige Ergebnis einmal vorstellen.
PS: Der Name PBExpress wurde von express.js abgeleitet, da ich mich bzgl. dem Routing dort ein wenig inspirieren lassen habe.
CHANGELOG:
18.12.2016 - 14:27:
- EnableExplicit
- Optionen für die maximale Content-Länge seitens des Users eingefügt
- Optionen für die Datenstruktur der übertragenden Daten eingefügt (JSON, Post, Raw-String)
- Bessere Überprüfung der Parameter für den Request
- Die Routen werden jetzt über ein MD5 Hash als Schlüssel gespeichert und in diesem sind auch die Parameter-Schlüssel selbst enthalten, um Kollisionen vorzubeugen