我使用节点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");
答案 0 :(得分:5)
您当前的代码是这样说的:
任何时候我收到任何请求,请发送example.html的内容。
如果有人要求/whatever.jpg他们会得到example.html的内容,当然这会给你一个破碎的图像。
如果您想使用node.js为静态文件提供服务,您可能希望使用Express.js之类的东西,使用此处引用的express.static
中间件自动处理它:
http://expressjs.com/api.html#app.use
显然,“使用快递”不是您问题的答案,但使用纯node.js的问题的答案可能是以下之一:
req.url
上使用switch语句来确定服务器正在查找哪个文件,并使用类似于fs.readFile('example.html')
的文件发送它,但也可以读取图像文件。答案 1 :(得分:4)
问题是节点不知道您的图像,并且不能像普通的Web服务器一样提供开箱即用的静态文件。使用像express这样的框架可以使这更容易。