How do I serve static files through Node.js locally?

前端 未结 3 947
你的背包
你的背包 2020-12-31 08:40

I have the following file locations :

file:///Users/MyName/Developer/sitename/scripts (contains all .js files..)
file:///Users/MyName/Developer/sitename/css          


        
相关标签:
3条回答
  • 2020-12-31 09:14

    The problem is that while you've defined the path for one static resource (sitename.html), you haven't defined the path for all the other static resources it references (e.g. somefile.js). Assuming the following file structure, below contains the server code that handles loading static resources relative to your public directory (www), without using external modules. (partly taken from here)

    project/
        server/    
            server.js
            dispatcher.js
        www/
            index.html
            js/ (your javascript files)
            css/ (your css files)
    

    server.js:

    var http = require('http');
    http.createServer(handleRequest).listen(8124, "127.0.0.1");
    var dispatcher = require('./dispatcher.js');
    
    function handleRequest(req, res) {
        try {
            console.log(req.url);
            dispatcher.dispatch(req, res);
        } catch(err) {
            console.log(err);
        }
    }
    

    dispatcher.js:

    var fs = require('fs');
    var path = require('path');
    
    this.dispatch = function(request, response) {
        //set the base path so files are served relative to index.html
        var basePath = "../www";
        var filePath = basePath + request.url;
    
        var contentType = 'text/html';
        var extname = path.extname('filePath');
        //get right Content-Type
        switch (extname) {
            case '.js':
                contentType = 'text/javascript';
                break;
            case '.css':
                contentType = 'text/css';
                break;
        }
    
        //default to index.html
        if (filePath == basePath + "/") {
            filePath = filePath + "index.html";
        }
    
        //Write the file to response
        fs.readFile(filePath, function(error, content) {
            if (error) {
                response.writeHead(500);
                response.end();
            } else {
                response.writeHead(200, {'Content-Type': contentType});
                response.end(content, 'utf-8');
            }
        });
    
    }
    
    0 讨论(0)
  • 2020-12-31 09:20

    The easiest solution I found on serving local static files is to use Http-Server.

    Its usage is dead simple. After installing it globally

     npm install http-server -g
    

    Go to the root directory you want to serve

    cd <dir>
    http-server
    

    That's it!

    0 讨论(0)
  • 2020-12-31 09:21

    You're able to load the files using the file:// URL because it's a feature of your web browser.

    When loading the address http://localhost:8080 you're no longer leveraging the browser's ability to serve the files (you're accessing the Node.js server). The HTML page being served contains relative paths which work in conjunction with the current hostname to load the assets.

    There is a multitude of options for serving the assets.

    You could serve the files with Node.js:

    • Express.js has a module for serving static assets
    • Node-static is a module I found with a quick search on npm

    Alternatively you could use a web server to serve the files for you. This is likely to be the most performant option. Here is an example of serving static content with nginx.

    0 讨论(0)
提交回复
热议问题