Re: Euphoria MVC updates
- Posted by jmduro Nov 12, 2021
- 3008 views
I'm using Win10 but no Powershell. I dit not understand how to use the batch script with lighttpd.
Here is the failing example. Its provides and empty debug.log.
#!/usr/local/euphoria-4.1.0-Linux-x64/bin/eui include std/map.e include std/filesys.e -- for canonical_path() include std/search.e -- for search:begins() include std/text.e -- for dequote include std/io.e -- for STDOUT include std/pretty.e include mvc/app.e include mvc/server.e include mvc/template.e include mvc/logger.e include mvc/database.e include mvc/db_sqlite3.e public function list_users() atom conn = db_connect( "sqlite3:test.sqlite" ) atom result = db_query( "SELECT * FROM users ORDER BY login" ) object row = {} sequence user_list = {} while sequence( row ) do row = db_fetch( result ) if sequence( row ) then sequence user = { { "id", row[1] }, { "login", row[2] }, { "password", row[3] } } log_info( "user: %s", {pretty_sprint(user, {2})} ) user_list &= { map:new_from_kvpairs(user) } end if end while db_free( result ) db_disconnect() return user_list end function public function insert_user(sequence login, sequence password) log_info( "Inserting user %s", {login} ) atom conn = db_connect( "sqlite3:test.sqlite" ) atom result = db_query( sprintf("INSERT INTO users(login, password) VALUES ('%s','%s')", {login, password}) ) integer nb = db_affected_rows() db_disconnect() return nb end function public function delete_user(sequence id) log_info( "Deleting user %s", {id} ) atom conn = db_connect( "sqlite3:test.sqlite" ) atom result = db_query( sprintf("DELETE FROM users WHERE id=%s", {id}) ) integer nb = db_affected_rows() db_disconnect() return nb end function public function check_user(sequence login, sequence password) log_info( "Checking user %s", {login} ) atom conn = db_connect( "sqlite3:test.sqlite" ) atom result = db_query( sprintf("SELECT id FROM users WHERE login = '%s' and password = '%s'", {login, password}) ) sequence user_list = {} sequence row = db_fetch(result) for i = 1 to length(row) do sequence user = { { "id", row[i] } } log_info( "user: %s", {pretty_sprint(user, {2})} ) user_list &= { map:new_from_kvpairs(user) } end for db_free( result ) db_disconnect() return length(user_list) end function set_template_path( "../templates" ) function static( object request ) sequence path_info = map:get( request, "PATH_INFO" ) log_info( "path_info = %s", {path_info} ) sequence local_file = canonical_path( "." & path_info ) log_info( "local_file = %s", {local_file} ) if search:begins( current_dir(), local_file ) then return send_file( local_file ) end if return response_code( 404 ) end function app:route( "/static/.+", "static" ) function login( object request ) sequence method = map:get(request, "REQUEST_METHOD", "") object response = map:new() sequence login = "", password = "", err = "" if equal(method, "POST") then login = map:get(request, "login", "") password = map:get(request, "password", "") integer count = check_user(login, password) if count = 1 then map:put( response, "user", login ) return render_template( "main.html", response ) else err = "Your Login Name or Password is invalid" end if end if map:put( response, "user", login ) map:put( response, "error", err ) return render_template( "login.html", response ) end function app:route( "/", "login", {"GET","POST"} ) function ins( object request ) object response = map:new() map:put( response, "user", "test" ) return render_template( "insert.html", response ) end function app:route( "/insert", "ins" ) function users( object request ) log_info( "query = %s", {map:get(request, "QUERY_STRING", "")} ) sequence method = map:get(request, "REQUEST_METHOD", "") sequence err = "" if equal(method, "POST") and map:has(request, "save") then sequence login = map:get(request, "login", "") sequence password = map:get(request, "password", "") insert_user(login, password) elsif equal(method, "GET") and map:has(request, "del") then sequence id = map:get( request, "del", "" ) log_info( "id = %s", {id} ) if length(id) then delete_user(id) else err = "User ID not found" end if end if object response = map:new() sequence user_list = list_users() map:put( response, "user", "test" ) map:put( response, "user_list", user_list ) map:put( response, "error", err ) return render_template( "users.html", response ) end function app:route( "/users", "users", {"GET","POST"} ) set_log_output({ STDOUT, "!debug.log" }) -- overwrite debug.log each time set_log_level( LOG_DEBUG ) server:start("0.0.0.0", 8080)
It may be related to the use of a DLL. When Euphoria crashes whle using a DLL, it usually behaves so (no trace).
Jean-Marc