HelloWorld
HelloWorld

Reputation: 11249

Serving Static Files Node

I am trying use only Node (no additional npms or express). Here is my current route handler:

function requestHandler(req, res) {

    var localFolder = __dirname + '/views/',
            page404 = localFolder + '404.html',
            fileToServe = "";

    if(/\/posts\/\d+/.test(req.url)){   
        fileToServe = __dirname + req.url.match(/\/posts\/\d+/) +'.json';
        fs.stat(fileToServe, function(err, contents){
            if(!err && contents){
                res.end(templateEngine('post',fileToServe));
            } else {
                res.end(templateEngine('error', err))
            }
        });
    } else if (/\/posts\//.test(req.url)){

    } else if (/.+[^\W]$/.test(req.url)){
        fileToServe = __dirname + '/views' + req.url.match(/\/.+[^\W]$/gi);
        fs.stat(fileToServe, function(err, contents){
            if(!err && contents){
                res.end(fs.readFileSync(fileToServe));
            } else {
                res.end(templateEngine('error', err))
            }
        });
    }
}

I have two questions:

In one of my views if have a <link> tag with a css file. When I go straight to the path, it is served (this is the regex that catches it: /.+[^\W]$/.test(req.url)). However, as mentioned, one of my views built from the template engine uses the css file.

How does the browser work when it sees the link tag? Does it send a GET request to my local server (node)? If it does, why doesn't my server send a response back? When I go directly to the link, it sends the response perfectly fine.

Furthermore, when I try going to the page that uses the css file in the link tag, it just hangs on an empty page. When I kill the server, it says it never received a response (once again, when I go to the link directly, I get the proper file).

Do I have to re-organize my routes? Serve static files separately?

Upvotes: 0

Views: 62

Answers (1)

Sidd
Sidd

Reputation: 1397

How does the browser work when it sees the link tag? Does it send a GET request to my local server (node)?

Yes. Browser creates the full URL based on the current URL and makes an HTTP GET request like it does for any other resource.

If it does, why doesn't my server send a response back? When I go directly to the link, it sends the response perfectly fine.

All evidence suggests that your page which links to the css is not being captured in the handler if-blocks. Try putting a couple of console.logs, one right inside the requestHandler and the other inside in the block which is supposed to handle the page request. I think you will only see one log show up in the server console.

Upvotes: 2

Related Questions