2013-03-05 132 views
12

这是我第一次用node.js。我得到它显示index.html,但它不显示在网站上的图像或其他任何东西,它只显示基本的HTML的东西。这是我如何设置它。 服务器上没有apache,php或其他任何东西,只有ubuntu,proftp和node(以及curl和其他依赖项)。我为节点文件在/ var/nodeFiles主目录和HTML /网站文件的目录是/ var/nodeFiles/WWW 所以我的节点服务器上的文件我做了这样的:用node.js显示html页面

var http = require('http'), 
    fs = require('fs'); 
fs.readFile('/var/nodeFiles/www/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(80); 
}); 

这工作,但它只显示index.html文件和附加到它的任何东西,所以没有图像,没有效果或任何HTML文件应该显示。文件和目录都是正确的,我已经加倍检查,文件夹的权限是正确的。那么我还需要做些什么才能让节点显示网站的其他部分? 我希望我已经正确地解释了我的自我,我被告知这是提出发展问题的地方。 感谢您花时间阅读本文。

+0

完全重复http://stackoverflow.com/questions/6126584/how-to-use-node-js-to-build-pages-that-are-a-mix-between-static-and- dynamic-cont?rq = 1 – 2013-03-05 18:59:55

+0

基本上你想要做的是提供静态内容关于此之前已经发布了很多问题。 – 2013-03-05 19:01:17

+0

他正在生成服务器文件中的html。我试图拿一个现有的网站,并使用fs库来显示它。如果以这种方式重写它是我必须做的,那就这样吧。 – user2137087 2013-03-05 19:04:20

回答

20

但它只显示index.html文件并没有什么连接到它,所以没有图像, 没有影响或任何HTML文件应显示。

这是因为在您的程序中,无论请求是什么样子,您都只返回浏览器。

您可以在一个更完整的例子来看看,这将返回正确的文件最常见的网页(HTML,JPG,CSS,JS)在这里https://gist.github.com/hectorcorrea/2573391

而且,看看这个博客我写了关于如何开始使用节点的文章。我认为它可能会为你澄清几件事:http://hectorcorrea.com/blog/introduction-to-node-js

+2

您的博客非常有帮助。从PHP到节点,应该清除一些概念。我刚刚发送了一些你的博客,他们已经有一段时间在做转换。 – user2137087 2013-03-05 19:20:14

+0

我很高兴你喜欢它。 – 2013-03-05 19:22:18

+0

如果我没有静态IP,我将如何在AWS上使用它? 'var serverUrl =“127.0.0.1”;'和'var serverUrl =“http://ec2-xx-xx-xx-xx.compute-1.amazonaws.com/”;'不起作用 – 2013-04-23 17:08:32

5

检查此基本代码以设置html服务器。它为我工作。

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


fs.readFile('./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(8000); 
}); 

+2

这只显示'index.html'并没有其他文件在该目录 – 2013-04-23 17:09:38

+0

如果我不知道路径,我只知道这种类型的网址“www.example.com/example/example1” – Tripathi29 2015-01-22 23:07:46

1

如果你的目标是简单地显示一些静态文件,你可以使用连接包。我已经取得了一些成功(我自己对NodeJS仍然很陌生),结合使用它和twitter引导API。

在命令行

:\> cd <path you wish your server to reside> 
:\> npm install connect 

然后在一个文件(我命名)Server.js

var connect = require('connect'), 
    http = require('http'); 
connect() 
    .use(connect.static('<pathyouwishtoserve>')) 
    .use(connect.directory('<pathyouwishtoserve>')) 
    .listen(8080); 

最后

:\>node Server.js 

注意事项:

如果你不不想显示导演y内容,排除.use(connect.directory行。

所以,我创建了一个名为“服务器”的文件夹放在文件夹中的index.html和相同文件夹中的引导API。然后当你访问计算机IP:8080时,它会自动使用index.html文件。

如果你想使用端口80(所以只需要http://,而不必输入:8080或其他端口)。你需要使用sudo启动节点,我不确定安全性的影响,但如果你只是将它用于内部网络,我个人认为这不是什么大问题。揭露外部世界是另一回事。

更新2014年1月28日:

我没有做我的最新的东西版本以下,所以尝试一下像上述第一,如果它不工作(和您阅读错误抱怨它无法找到nodejs),继续并尝试下面的内容。

结束更新

此外,在Ubuntu上运行时,我碰到了,如果你有这个问题,我建议使用如的NodeJS名(与NPM)问题使用别名或东西“重命名”的NodeJS到节点。

命令我使用(或好或坏):

创建一个名为节点

:\>gedit /usr/local/bin/node 
#!/bin/bash 
exec /nodejs "[email protected]" 

sudo chmod -x /usr/local/bin/node 

新的文件,应该让

node Server.js 

工作就好

+0

我的浏览器出现错误,说不能GET /。想法? – 2015-10-16 14:11:41

+0

另外,当我将静态设置为'../'时,我得到一个错误,说undefined不是函数。 – 2015-10-16 14:17:58

+0

我怀疑这是由于包中的更新,简单的例子在连接更新后停止工作....我不得不做一些挖掘,看看最新版本使用什么(我发现它在一个点但是现在在github上看不到任何示例)*长话短说,您使用的是什么版本的工具,这将推动一个答案。 – onaclov2000 2015-10-16 19:05:18

5

这为我做了这个把戏:

var express = require('express'), 
app = express(); 
app.use('/', express.static(__dirname + '/')); 
app.listen(8080);