19

这是我第一次使用 node.js。我让它显示 index.html,但它不显示网站上的图像或其他任何东西,它只显示基本的 html 内容。这是我的设置方式。服务器上没有 apache、php 或其他任何东西,只有 ubuntu、proftp 和 node(以及 curl 和其他依赖项)。我为节点文件 /var/nodeFiles 创建了主目录,而 html/site 文件的目录是 /var/nodeFiles/www 所以对于我的节点服务器文件,我这样做是这样的:

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 文件应显示的任何内容。文件和目录都是正确的,我已经仔细检查过,文件夹的权限是正确的。那么我还需要做什么才能让节点显示网站的其余部分?我希望我已经正确地解释了我自己,有人告诉我这是问开发问题的地方。感谢您抽出时间来阅读。

4

4 回答 4

24

但它只显示 index.html 文件并且没有附加任何内容,因此没有图像、效果或 html 文件应显示的任何内容。

这是因为在您的程序中,无论请求是什么样的,您都会返回浏览器,这是唯一的事情。

您可以在此处查看更完整的示例,该示例将返回最常见网页(HTML、JPG、CSS、JS)的正确文件https://gist.github.com/hectorcorrea/2573391

另外,看看我写的这篇关于如何开始使用 node 的博客文章。我认为它可能会为您澄清一些事情:http: //hectorcorrea.com/blog/introduction-to-node-js

于 2013-03-05T19:11:09.683 回答
11

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

var http = 要求('http'),
    fs = 要求('fs');


fs.readFile('./index.html', function (err, html) {
    如果(错误){
        抛出错误;
    }       
    http.createServer(函数(请求,响应){  
        response.writeHeader(200, {"Content-Type": "text/html"});  
        response.write(html);  
        response.end();  
    }).听(8000);
});

于 2013-03-05T19:03:14.667 回答
9

这对我有用:

var express = require('express'),
app = express(); 
app.use('/', express.static(__dirname + '/'));
app.listen(8080);
于 2015-10-16T19:08:50.313 回答
1

如果您的目标是简单地显示一些静态文件,您可以使用 Connect 包。我已经取得了一些成功(我自己对 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

注意事项:

如果您不想显示目录内容,请排除 .use(connect.directory 行。

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

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

2014 年 1 月 28 日更新:

我不必对我的最新版本执行以下操作,因此请先像上面那样尝试,如果它不起作用(并且您阅读了抱怨它找不到 nodejs 的错误),请继续并可能尝试下面。

结束更新

此外,在 ubuntu 中运行时,我遇到了使用 nodejs 作为名称(使用 NPM)的问题,如果您遇到此问题,我建议使用别名或其他东西将 nodejs“重命名”为 node.js。

我使用的命令(无论好坏):

创建一个名为 node 的新文件

:\>gedit /usr/local/bin/node
#!/bin/bash
exec /nodejs "$@"

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

这应该使

node Server.js 

工作得很好

于 2013-03-05T20:20:47.073 回答