2012-12-06 34 views
2

我已经使用节点js构建了一个简单的服务器。 我希望发送一个包含内部图像的html。节点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"); 
+2

可能只是您的图片路径被破坏,与node.js无关。 – davidpfahler

+0

当我打开html文件时,它加载正常 – oopsi

+0

发布相关的代码。 – Musa

回答

5

您当前的代码是这样说:

,每当我想任何要求,发下来example.html的内容。

如果有人要求/whatever.jpg,他们将获取example.html的内容,当然这会显示一张破碎的图像。

如果你想服务器静态文件使用Node.js的你会想可能使用类似Express.js它会自动使用express.static中间件此处引用它处理: http://expressjs.com/api.html#app.use

显然“使用快车” ISN”回答您的问题,但是使用纯节点.js回答您的问题可以是以下任意一种:

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

真棒的答案。让我意识到比我希望的更多。非常感谢你 – oopsi

4

的问题是,节点不知道你的形象并不能提供静态文件外的开箱喜欢你的平均Web服务器。使用像express这样的框架使得这更容易。