3

我已经使用节点 js 构建了一个简单的服务器。我希望发送一个包含内部图像的 html。

好的,所以我知道如何发回一个 html 文件。而且我知道如何发回图像。

当我发送带有其中的 html 响应时<img src = 'green2.jpg'>,页面加载时图像损坏。

有任何想法吗?

相关代码:

var net = require ('net');
var url = require('url');
var fs = require('fs');

var server = net.createServer(function (socket) {
    socket.on('end', function() {
        console.log('server disconnected');
    });

    socket.on('data', function(data) {
        get();
    });

    var get = function (parse) {
        fs.readFile('example.html',  function(err, data) {
            if (err) throw err;
            socket.write('HTTP/1.0 200 OK\r\nDate: Fri, 31 Dec 1999 23:59:59 GMT\r\nContent-Type: text/html\r\n\r\n');
            socket.write(data);
            socket.end();
        });
    }
});

server.listen("8888");
4

2 回答 2

6

您当前的代码是这样说的:

每当我收到任何请求时,请发送 example.html 的内容。

如果有人要求 /whatever.jpg,他们将获得 example.html 的内容,这当然会向您显示损坏的图像。

如果您想使用 node.js 提供静态文件,您可能需要使用Express.jsexpress.static之类的东西,它使用此处引用的中间件 自动处理它:http: //expressjs.com/api.html#app.use

显然“使用快递”不是您问题的答案,但使用纯 node.js 对您的问题的答案是以下之一:

  1. 安装一个像 node-static 这样的模块来处理像图像这样的静态文件。教程在这里
  2. 使用 switch 语句req.url来确定服务器正在查找的文件,并使用类似于 your 的文件将其发送下来fs.readFile('example.html'),但也可以读取图像文件。
于 2012-12-06T21:15:44.403 回答
4

问题是节点不知道您的图像,并且无法像普通 Web 服务器那样提供开箱即用的静态文件。使用express之类的框架使这变得容易得多。

于 2012-12-06T21:12:30.117 回答