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

时间:2014-01-16 19:13:00

标签: javascript html css node.js

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

是否可以将其设置为“public”文件夹中的所有文件都能连接,而不必一直将它们添加到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);

任何帮助都会非常感激,只要告诉我你是否需要我列出我的文件夹结构(虽然我不知道为什么那会是必要的......):)

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

好吧,您可以按照其他建议并使用其他方法来提供静态文件,Nginx可能更适合直接静态文件服务,而Express或节点静态或任意数量的模块比大多数模块做得好得多我们可以一起做静态文件的“webserver”部分。如果你正在寻找彻头彻尾的性能,那么将动态+ Nginx for static的节点组合在一起可能是最好的组合,使用流行服务器框架的纯节点稍微简单一些,几乎同样好。

但这是代码中的实际问题:

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