简体   繁体   English

Javascript 和 CSS 在节点服务器中不起作用

[英]Javascript and CSS don't work in node server

So I'm trying to make a web app, using a node server.所以我正在尝试使用节点服务器制作 web 应用程序。 I run into a problem where the CSS, Javascript don't work when linking them with a src like or.我遇到了一个问题,其中 CSS、Javascript 在将它们与 src 或之类的链接时不起作用。

The only way I can have css and javascript, is to directly put it inside the script and style parameters, but that doesn't seem that practical我可以拥有 css 和 javascript 的唯一方法是将其直接放在脚本和样式参数中,但这似乎并不实用

The error that it pulls out shows a url: 127.0.0.1/home.js它拉出的错误显示 url: 127.0.0.1/home.js

why is this happening, and is there a work around?为什么会发生这种情况,是否有解决方法?

here is the code这是代码

const fetch = require('node-fetch');
const fs = require("fs");
const http = require("http");
const url = require("url");

const server = http.createServer((req, res) => {

    // get URL
    const pathName = url.parse(req.url, true).pathname;

    console.log(pathName);
    // create split pathName
    const pathSplit = pathName.split("/");
    pathSplit.shift();

    // HOME PATH
    if(pathName === "/home" || pathName === "/"){
        // Get HTML data
        const data = renderHome();

        res.writeHead(200, {"content-type": "text/html"});
        
        fs.readFile(`${__dirname}/templates/template-basic.html`, "utf-8", (err, data) => {

            fs.readFile(`${__dirname}/templates/template-battlepass.html`, "utf-8", (err, d) => {
                let output = data.replace("{%CONTAINER%}", d);
                res.end(output);
            });
        });
        
    }
    
    // ITEM SHOP PATH
    else if(pathName === "/itemShop") {
        // Get HTML data
        const data = renderItemShop();
        
        res.writeHead(200, {"content-type": "text/html"});
        res.end("This is the item shop page");
    }
    
    // TOURNAMENTS PATH
    else if(pathName === "/tournaments") {
        // Get HTML data
        const data = renderTournaments();

        res.writeHead(200, {"content-type": "text/html"});
        res.end("this is the tournaments page");
    }
    
    // ITEMS PATH
    else if(pathSplit[0] === "items") {

        // List all the items for the page
        const itemsPages = ["backpacks", "contrails", "emotes", "gliders", "skins", "pickaxes", "wraps"];
        let itemConfirm = false;
        
        // If URL has been found, change itemConfirm to true
        for(let i = 0; i < itemsPages.length; i++){
            if(itemsPages[i] === pathSplit[1]){
                // Get HTML data
                const data = renderItems(pathSplit[1]);
                
                res.writeHead(200, {"content-type": "text/html"});
                res.end(`This is the page for ${pathSplit[1]} in items`);
                itemConfirm = true;
            }
        };

        // If itemConfirm is false, no url found
        if(itemConfirm === false) {
            res.writeHead(404, {"content-type": "text/html"});
            res.end(`No URL found for ${pathSplit[1]} in items`);
        };
    }

    // JAVASCRIPT

    // NO URL FOUND PATH: 404
    else{
        res.writeHead(404, {"content-type": "text/html"});
        res.end("could not find URL");
    }
});
server.listen(1337, "127.0.0.1", () => {
    console.log("listening for reqs now");
});

I created a simple server that can serve any type of file using the mime-types library.我创建了一个简单的服务器,可以使用 mime-types 库为任何类型的文件提供服务。 My basic http server works like this:我的基本 http 服务器的工作方式如下:

const http = require('http');
const fs = require('fs');
const path = require('path');
const mime = require('mime-types'); //Creates the appropriate headerType based on the extension

http.createServer(function (request, response) {
  let fileName = path.basename(request.url) || 'index.html' //so that the homepage uses index.html
  filePathPart = path.dirname(request.url).slice(1) + "/" + fileName
  filePath = "public/" + filePathPart //I store my files in public/js/ or public/css/
  console.log(filePath) //just to check if I got the correct files
  mimeType = mime.contentType(fileName)
  getFile(response, mimeType, filePath)
}).listen(8080);


//I wrote a function to write all the responses the server gives, with this I don't need to expect a specific number of inputs, I can load any number of js/css files or even other html pages.
function getFile(response, mimeType, filePath) {
  fs.readFile(filePath, function (err, contents) {
    response.writeHead(200, { "Content-Type": mimeType });
    response.end(contents);
  })
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM