【问题标题】:display html page with node.js使用 node.js 显示 html 页面
【发布时间】:2013-03-05 18:57:42
【问题描述】:

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

【问题讨论】:

  • 基本上你想做的就是提供静态内容之前已经有很多关于这个的问题了。
  • 他正在服务器文件中生成 html。我试图获取一个现有站点并使用 fs 库显示它。如果以这种方式重写它是我必须做的,那就这样吧。
  • 使用完整的文件/图像 url 而不是相对 url。

标签: node.js


【解决方案1】:

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

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

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

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

【讨论】:

  • 您的博客非常有帮助。从 PHP 到节点,有一些概念需要澄清。我刚刚将您的博客发送给了几个人,他们已经花了一些时间进行转换。
  • 如果我没有静态 IP,我将如何在 AWS 上使用它? var serverUrl = "127.0.0.1";var serverUrl = "http://ec2-xx-xx-xx-xx.compute-1.amazonaws.com/"; 不起作用
  • 通过注释掉修复:}).listen(port/* , serverUrl */);
【解决方案2】:

检查此基本代码以设置 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); });

【讨论】:

  • 这仅显示index.html,并且该目录中没有其他文件
  • 如果我不知道路径,我也只知道这种“www.example.com/example/example1”的url
【解决方案3】:

这对我有用:

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

【讨论】:

    【解决方案4】:

    如果您的目标是简单地显示一些静态文件,您可以使用 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。

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

    创建一个名为node的新文件

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

    应该是这样的

    node Server.js 
    

    工作正常

    【讨论】:

    • 我在浏览器中收到一条错误消息,显示无法获取 /。想法?
    • 另外,当我将静态设置为 '../' 时,我收到一条错误消息,指出未定义不是函数。
    • 我怀疑这是由于包中的更新,这个简单的例子在连接更新后停止了对我的工作......我必须做一些挖掘来看看最新版本使用了什么(我' 曾经找到它,但现在在 github 上没有看到任何示例)。*长话短说,您使用的是什么版本的工具,这将推动答案。
    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2014-08-07
    相关资源
    最近更新 更多