Search code examples
kdb

"html/main.html: not found" error in kdb web application


I'm developing a web application using websocket by taking reference from https://code.kx.com/v2/wp/websockets/.

The application resides at path:

Directory structure:
/Users/repos/chatu/
    -->html
          --> main.html
          --> main.js
    -->q
          --> main.q


q)\pwd
"/Users/repos/chatu" //- and main.html(index) is at path /Users/repos/chatu/html/main.html 

When the pwd is "/Users/repos/chatu" then the webpage is opening properly on browser using url - http://localhost:5001/main.html

But when the pwd is changed to any other directory such as

q)\pwd
"/Users/repos" 

Then hitting same url as above throws below error :

html/main.html: not found

What I can understand from the error is that web server is expecting the html/main.html at the current working directory and it is not able to find that.

How/Where can I set absolute path for index.html that from any current working directory the web browser can find the main.html page?(Cannot find/understand any answer which solves same problem).

Code snippet -
main.js
function connect(){
    if ("WebSocket" in window) {
        ws = new WebSocket("ws://localhost:5001/");
        output.value="connecting...";
        /* ws.onopen=function(e){output.innerHTML="connected"}; */
        ws.onclose=function(e){output.innerHTML="disconnected"};
        ws.onerror=function(e){output.value=e.data};
        /*
            when a message is received,
            prepend the message to the display area
            along with the input command
        */
        } else alert("WebSockets not supported on your browser.");
    }

main.html
<!doctype html>
<html>
<head>
    <title>Chatu</title>
    <style>
        /* define some CSS styling on page elements */
        div#wrap{
            width:100%;
            overflow:auto;
        }
        textarea#txtInput {width: 97.5%; height: 60px; float:left; padding: 10px; margin-top: 10px;}
        div#txtOutput{
            width: 97.5%; height: 300px; font-family: "Courier New"; padding: 10px;
            border: 1px solid gray; margin-top: 2px; overflow:auto;
        }
    </style>
</head>
<body>
<div id="wrap">
<fieldset id='heads' style="border:1; border-radius:10px">
    <legend align="center" style="color:blue">Chatu</legend>
    <div id="txtOutput"></div>
    <textarea id="txtInput" autofocus></textarea>
</fieldset>
</div>

</body>
<script type="text/javascript" src="main.js"></script>
</html>

main.q
.z.ws:{neg[.z.w].j.j @[.da.mf;x;{`$ "'",x}];};

Solution

  • .h.HOME is the variable you are interested in

    https://code.kx.com/v2/ref/doth/#hhome-webserver-root