Share My Creation [Project Template] EndsMeet Server

Version: 1.40
GitHub: https://github.com/pyhoon/EndsMeet-Server

This is a project template for EndsMeet server library.
It depends on EndsMeet and MiniHtml* libraries.
Note: MiniHtml library can be removed if you want to load html files from asset.

Tutorial: Getting Started

More example: EndsMeet ChartJs HTMX

EndsMeet Server
 

Attachments

Last edited:
Note
This example is not applicable for the latest library

A short tutorial to add a new api.

Modify to the following code.

[CODE lang="b4x" title="HelloController"]Public Sub RouteApi
Select Request.Method
Case "GET"
Dim RequestMap As Map = EndsMeetUtils.GetRequestElements(Request.RequestURI, Main.BaseElements)
If RequestMap.ContainsKey("First") Then
Dim Person As String = RequestMap.Get("First")
GetGreet(Person)
Else
GetJSON
End If
Case Else
Log("Unsupported method: " & Request.Method)
EndsMeetUtils.ReturnMethodNotAllow(HRM, Response)
End Select
End Sub

Private Sub GetGreet (Name As String)
#region Documentation
' #Version = v1
' #Desc = Return greeting message
#End region
Model.ReturnGreetingApi(Name)
End Sub[/CODE]

[CODE lang="b4x" title="HelloModel"]Public Sub ReturnGreetingApi (Person As String)
Dim m1 As Map
m1.Initialize
m1.Put("greeting", $"Merry Xmas, ${Person}!"$)
HRM.ResponseObject = m1
EndsMeetUtils.ReturnHttpResponse(HRM, Response)
End Sub[/CODE]

[CODE lang="b4x" title="IndexView"]Public Sub Render
Dim strHtml As String = $"<center>
<a href="${Main.ROOT_PATH}hello">Go to Hello page</a><br/>
<p><a href="${Main.ROOT_PATH}api/v1/hello">Get Hello API</a></p>
<p><a href="${Main.ROOT_PATH}api/v1/hello/B4X">Get Greeting API</a></p>
</center>"$
EndsMeetUtils.ReturnHtml(strHtml, Response)
End Sub[/CODE]

Note: This example doesn't check for api version.

1702903113058.png
 
Last edited:
Note
This example is not applicable for the latest library

Another example using HTMX.

[CODE lang="b4x" title="IndexView"]Sub Class_Globals
Private Response As ServletResponse
End Sub

Public Sub Initialize (req As ServletRequest, resp As ServletResponse)
Response = resp
End Sub

Public Sub Render
Dim strHtml As String = $"<center>
<button hx-put="/demo/messages" style="padding: 10px">
Put To Messages
</button>
<p>
<input type="text" name="q"
hx-get="/demo/trigger_delay"
hx-trigger="keyup changed delay:500ms"
hx-target="#search-results"
placeholder="Search...">
<div id="search-results" style="margin-top: 60px">No result</div>
</p>
</center>

<script src="https://unpkg.com/[email protected]" integrity="sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw" crossorigin="anonymous"></script>
"$
EndsMeetUtils.ReturnHtml(strHtml, Response)
End Sub[/CODE]

[CODE lang="b4x" title="WebHandler" highlight="46-57"]Sub Class_Globals
Private Request As ServletRequest
Private Response As ServletResponse
End Sub

Public Sub Initialize

End Sub

Sub Handle (req As ServletRequest, resp As ServletResponse)
Request = req
Response = resp
ProcessRequest
End Sub

Private Sub ProcessRequest
Log($"[${Request.Method}] ${Request.RequestURI}"$)
If EndsMeetUtils.isWebRequest(Request.RequestURI, Main.BaseElements) = False Then
Response.SendError(400, "Bad Request")
Return
End If

Dim RequestMap As Map = EndsMeetUtils.GetRequestElements(Request.RequestURI, Main.BaseElements)
Dim Path As String = RequestMap.Get("Path")
If Path.EqualsIgnoreCase(Main.BaseElements.Path.Element) = False Then
Response.SendError(400, "Bad Request")
Return
End If

Select RequestMap.Size
Case 1 ' root
Log(RequestMap)
Case 2 ' path (demo)
Dim Index As IndexView
Index.Initialize(Request, Response)
Index.Render
Return
Case Else
Dim Controller As String = RequestMap.Get("Controller")
Select Controller
Case "hello"
Dim Hello As HelloController
Hello.Initialize(Request, Response)
Hello.RouteWeb
Return
Case "messages"
DateTime.DateFormat = "dd/MM/yyyy HH:mm:ssa"
Response.Write(DateTime.Date(DateTime.Now))
Return
Case "trigger_delay"
Dim q As String = Request.GetParameter("q")
If q = "" Then
Response.Write("No result")
Else
Response.Write(q)
End If
Return
End Select
End Select
Response.SendError(400, "Bad Request")
End Sub[/CODE]
 
Last edited:
Note
This message is not applicable for the latest library

EndsMeet v0.18 beta 3 updated.
Now only has a single BaseHandler.
 
Last edited:
Version 0.90
This is now a project template. Main module is now cleaner.
It depends on MiniHtml and WebApiUtils.

EndsMeet is now a separate library to create B4J server app.
 
If you are getting error with EndsMeet v0.93 or v0.96:
HttpsFilter - 16: Unknown member: sslport

Please update the code in HttpsFilter from app.sslPort to app.ssl.Port at line #16.

[CODE lang="b4x" highlight="17"]'Https Filter class
Sub Class_Globals

End Sub

Public Sub Initialize

End Sub

'Return True to allow the request to proceed.
Public Sub Filter (req As ServletRequest, resp As ServletResponse) As Boolean
If req.Secure Then
Return True
Else
'Dim app As EndsMeet = Main.app
resp.SendRedirect(req.FullRequestURI.Replace("http:", "https:") _
.Replace(Main.app.Port, Main.app.ssl.Port))
Return False
End If
End Sub[/CODE]
 
Version 1.00

What's New
  1. Updated dependencies to EndsMeet v1.00
  2. Updated code example in Index.bas
  3. Added LibDownloader comment link
  4. Added libs.json file
 
Version 1.01

What's Changed
  1. Relink EndsMeet library (Filename without version number)
  2. Change app.Get to app.Post for /modal
  3. Update libs.json
 
Check an example on how to update Chart.js using HTMX
 
Version 1.10

What's Changed
  1. Based on EndsMeet.b4xlib v1.60 and MiniHtml.b4xlib v0.30
  2. Put template in release folder
  3. Update libs.json (WebApiUtils.b4xlib removed)
 
Version 1.20

What's Changed
  1. Based on EndsMeet.b4xlib v1.80 and MiniHtml2.b4xlib v2.00
 
Version 1.30

What's Changed
  1. Update frontend example (Index.bas)
  2. Update config.example
  3. Update reference to MiniHtml v2.00
  4. Update libs.json
 
Version 1.40

What's Changed
  1. Update Index.bas
  2. Update config.example
  3. Update reference to MiniHtml v2.01
  4. Update libs.json
 
Back
Top