Node.js - zewnętrzne pliki JS i CSS (tylko przy użyciu node.js nie są ekspresowe)

Próbuję nauczyć się node.js i trochę zablokowałem.

Moim problemem jest to, że nie mogłem załadować zewnętrznego pliku css i js do pliku HTML.

GET http://localhost:8080/css/style.css 404 (Not Found) 
GET http://localhost:8080/js/script.css 404 (Not Found) 

(to było, gdy wszystkie pliki były w katalogu głównym aplikacji)

Powiedziano mi, aby nieco naśladować następującą strukturę aplikacji, dodać trasę dla publicznego katalogu, aby serwer mógł obsługiwać zewnętrzne pliki.

moja struktura aplikacji jest taka

domain.com
  app/
    webserver.js

  public/
    chatclient.html

    js/
      script.js

    css/
      style.css

Mój skrypt webserver.js znajduje się w katalogu głównym aplikacji, a wszystko, co chcę uzyskać, jest „publiczne”.

Widziałem teżten przykład który używa path.extname (), aby uzyskać dowolne rozszerzenia plików znajdujące się w ścieżce. (patrz ostatni blok kodu).

Próbowałem więc połączyć nową strukturę witryny z tym przykładem path.extname (), aby serwer WWW zezwalał na dostęp do dowolnego pliku w moim publicznym katalogu, więc mogę renderować plik html, który odwołuje się do zewnętrznych plików js i css .

Mój webserver.js wygląda tak.

var http = require('http')
, url = require('url')
, fs = require('fs')
, path = require('path')
, server;

server = http.createServer(function(req,res){

  var myPath = url.parse(req.url).pathname;

    switch(myPath){

      case '/public':

        // get the extensions of the files inside this dir (.html, .js, .css)
        var extname = mypath.extname(path);

          switch (extname) {

            // get the html
            case '.html':
              fs.readFile(__dirname + '/public/chatclient.html', function (err, data) {
                if (err) return send404(res);
                res.writeHead(200, {'Content-Type': 'text/html'});
                res.write(data, 'utf8');
                res.end();
              });
            break;

            // get the script that /public/chatclient.html references
            case '.js':
              fs.readFile(__dirname + '/public/js/script.js', function (err, data) {
                if (err) return send404(res);
                res.writeHead(200, { 'Content-Type': 'text/javascript' });
                res.end(content, 'utf-8');
                res.end();
              });
            break;

            // get the styles that /public/chatclient.html references
            case '.css':
              fs.readFile(__dirname + '/public/css/style.css', function (err, data) {
                if (err) return send404(res);
                res.writeHead(200, { 'Content-Type': 'text/javascript' });
                res.end(content, 'utf-8');
                res.end();
              });
          }
          break;

          default: send404(res);
        }
    });

W przypadku publicznym próbuję uzyskać dowolny folder / plik wewnątrz tego katalogu poprzez var extname = mypath.extname (ścieżka); Podobny do podanego przeze mnie linku.

Ale w tej chwili „extname” jest puste, gdy go piszę.

Czy ktoś może doradzić, co mogę dodać lub dodać tutaj? Wiem, że można to łatwo zrobić w Expressie, ale chciałbym wiedzieć, jak osiągnąć to samo, opierając się tylko na Node.

Doceniam każdą pomoc na ten temat.

Z góry dziękuję.

questionAnswers(6)

yourAnswerToTheQuestion