2014-08-29 19 views
2

在本地机器上,我想在Node上部署静态网页(包含HTML,CSS,JS文件),而不使用任何框架(例如Express)。我没有把相关的文件到公用文件夹的网页,然后调用的index.html,通过使用节点FS库,如下所示:Node.JS上的静态Web部署(不使用任何框架)

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

fs.readFile('./public/index.html', function (err, html) { 
    if (err) { throw err;} 
    http.createServer(function(request, response) { 
    response.writeHeader(200, {"Content-Type": "text/html"}); 
    response.write(html); response.end(); 
    }).listen(1337, '127.0.0.1');; 
}); 

我用卷曲的所有文件(HTML, CSS,JS)实际上部署在本地主机上。但是,当我转到localhost上的端口1337时,它会显示HTML内容,但不会显示以index.html导入的JS编写的行为。

+0

您的服务器设置在端口1337上,而不是80.您访问了正确的端口吗? – Sirko 2014-08-29 13:34:02

+0

转到http://127.0.0.1:1337 – 2014-08-29 13:34:19

+0

@Sirko对不起,做了端口号错误,但我仍然没有得到的行为(写在公共目录中的JS文件)。 – 2014-08-29 13:48:29

回答

3

您的index.html文件正在向index.js(或任何JS文件所在的文件)发出单独请求。您的服务器将以相同方式每处理:服务index.html文件的内容。

以这种方式创建服务器不会像其他服务器(如Apache可能)那样自动为文件系统提供文件。相反,你需要做的是这样的:

http.createServer(function(request, response) { 
    if (request.url == "/index.html" || request.url == "/") { 
    response.writeHeader(200, {"Content-Type": "text/html"}); 
    fs.createReadStream("./public/index.html").pipe(response); 
    } 
    else if (request.url == "/index.js") { 
    response.writeHeader(200, {"Content-Type": "text/javascript"}); 
    fs.createReadStream("./public/index.js").pipe(response); 
    } 
}).listen(1337, '127.0.0.1'); 

当然写的要提供服务的文件系统中的每个文件的路线可能是非常愚蠢的。你可以使用static file server module,或者自己实现一个静态文件服务器。这将涉及根据请求URL检查文件系统,然后使用正确的内容类型提供文件,您可以查看using a module like mime