Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js app.js使css和js可用_Javascript_Html_Css_Node.js - Fatal编程技术网

Javascript Node.js app.js使css和js可用

Javascript Node.js app.js使css和js可用,javascript,html,css,node.js,Javascript,Html,Css,Node.js,我想知道如何制作我的app.js,这样我就可以从index.html或放置在“public”文件夹中的任何其他html页面访问任何.js或.css文件。我将.css和.js文件放在“public”文件夹中不同的“css”或“javascript”文件夹中,但如果没有直接放在公共文件夹中的css和javascript,并且没有子文件夹,我真的不知道如何使我的index.html连接到它们 有没有可能使“公共”文件夹中的所有文件都可以连接,而不必一直将它们添加到app.js中 这是app.js: v

我想知道如何制作我的app.js,这样我就可以从index.html或放置在“public”文件夹中的任何其他html页面访问任何.js或.css文件。我将.css和.js文件放在“public”文件夹中不同的“css”或“javascript”文件夹中,但如果没有直接放在公共文件夹中的css和javascript,并且没有子文件夹,我真的不知道如何使我的index.html连接到它们

有没有可能使“公共”文件夹中的所有文件都可以连接,而不必一直将它们添加到app.js中

这是app.js:

var
http = require('http'),
path = require('path'),
fs = require('fs'),

extensions = {
    ".html" : "text/html",
    ".css" : "text/css",
    ".js" : "application/javascript",
    ".png" : "image/png",
    ".gif" : "image/gif",
    ".jpg" : "image/jpeg"
};

function getFile(filePath,res,page404,mimeType){
    fs.exists(filePath,function(exists){
        if(exists){
            fs.readFile(filePath,function(err,contents){
                if(!err){
                    res.writeHead(200,{
                        "Content-type" : mimeType,
                        "Content-Length" : contents.length
                    });
                    res.end(contents);
                } else {
                    console.dir(err);
                };
            });
        } else {
            fs.readFile(page404,function(err,contents){
                if(!err){
                    res.writeHead(404, {'Content-Type': 'text/html'});
                    res.end(contents);
                } else {
                    console.dir(err);
                };
            });
        };
    });
};

function requestHandler(req, res) {
    var
    fileName = path.basename(req.url) || '/index/index.html',
    ext = path.extname(fileName),
    localFolder = __dirname + '/public/',
    page404 = localFolder + '404.html';

    if(!extensions[ext]){
        res.writeHead(404, {'Content-Type': 'text/html'});
        res.end("<html><head></head><body>The requested file type is not supported</body></html>");
    };

    getFile((localFolder + fileName),res,page404,extensions[ext]);
};

http.createServer(requestHandler)

.listen(process.env.PORT, process.env.IP);
var
http=require('http'),
path=require('path'),
fs=需要('fs'),
扩展={
“.html”:“text/html”,
“.css”:“文本/css”,
.js:“应用程序/javascript”,
“.png”:“image/png”,
“.gif”:“image/gif”,
.jpg:“图像/jpeg”
};
函数getFile(filePath,res,page404,mimeType){
存在(文件路径,函数(存在){
如果(存在){
fs.readFile(文件路径、函数(错误、内容){
如果(!err){
文书标题(200{
“内容类型”:mimeType,
“内容长度”:contents.Length
});
res.end(目录);
}否则{
console.dir(err);
};
});
}否则{
fs.readFile(第404页,函数(错误,内容){
如果(!err){
res.writeHead(404,{'Content-Type':'text/html'});
res.end(目录);
}否则{
console.dir(err);
};
});
};
});
};
函数requestHandler(req,res){
变量
fileName=path.basename(req.url)| |'/index/index.html',
ext=path.extname(文件名),
localFolder=\uu dirname+'/public/',
page404=localFolder+'404.html';
如果(!扩展名[ext]){
res.writeHead(404,{'Content-Type':'text/html'});
res.end(“不支持请求的文件类型”);
};
getFile((localFolder+fileName)、res、page404、扩展名[ext]);
};
http.createServer(requestHandler)
.listen(process.env.PORT、process.env.IP);

非常感谢您的帮助,如果您需要我列出我的文件夹结构,请告诉我(尽管我不知道为什么这是必要的…)

您可以使用
ExpressJS


好吧,您可以遵循其他建议并使用其他方式来服务静态文件,Nginx可能更适合直接的静态文件服务,而Express或node static或任何数量的模块做的工作都比我们大多数人一起做静态文件的“webserver”部分要好得多。如果您希望获得全面的性能,那么将node for dynamic与Nginx for static结合起来可能是最好的组合,而使用流行服务器框架的纯node则是一个稍微简单一些、几乎同样好的选择

但代码中的实际问题是:

var fileName = path.basename(req.url) || '/index/index.html', // etc
path.basename()
去掉所有目录信息,只需将文件名返回给您即可。您需要更像以下内容的内容:

// you should refactor and expand on this one-liner where it makes sense
var urlpath = require('url').parse(req.url).pathname;
var fileName = urlpath || '/index/index.html', // etc

@minitech是对的,您应该使用Nginx提供静态文件。如果这纯粹是出于学术原因,那么看看其他静态文件服务器项目,如
摇头丸
connectstatic
中间件。您是否试图下载CSS和JS文件,并将其作为文本显示在浏览器中?或者仅仅被一个HTML页面引用?仅仅被一个HTML页面引用Daniel不推荐使用Express。如果出于某种原因你真的不能使用Express,请查看Express在引擎盖下使用的代码,以获得灵感。如果你需要帮助上快车,我会在上面放一个视频。它会告诉你为什么要使用Express。哦,你已经将你的系统开放给了一个新的平台,尽管你已经通过白名单列出了你支持的文件扩展名来限制它。正确、安全地完成这些工作并不容易,而且有很多可靠的选项可以为您正确、安全地完成这些工作,这就是为什么人们通常会建议您不要自己完成这些工作。