节点js。发送包含图像的html

时间:2012-12-06 20:46:05

标签: html node.js

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

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

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

有什么想法吗?

相关代码:

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");

2 个答案:

答案 0 :(得分:5)

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

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

如果有人要求/whatever.jpg他们会得到example.html的内容,当然这会给你一个破碎的图像。

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

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

  1. 安装类似node-static的模块来处理像图像这样的静态文件。 Tutorial here
  2. req.url上使用switch语句来确定服务器正在查找哪个文件,并使用类似于fs.readFile('example.html')的文件发送它,但也可以读取图像文件。

答案 1 :(得分:4)

问题是节点不知道您的图像,并且不能像普通的Web服务器一样提供开箱即用的静态文件。使用像express这样的框架可以使这更容易。