我正在尝试学习 nodejs,我认为最好的方法是尝试在不使用 express 或任何其他非核心模块的情况下做一些事情。我一直在尝试同时发送一些文本和图像。我正在尝试的代码是:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(request,response) {
fs.readFile('my_pic.jpg', function(error, file) {
response.writeHead(200, {'content-type':'text/html'});
response.write('<p>hi there!</p>');
response.writeHead(200, {'content-type':'image/jpg'});
response.write(file, 'image');
response.end();
});
});
var port = process.env.PORT || 8080;
server.listen(port, function() {
console.log('Listening on port ' + port);
});
所以理想情况下应该交付的是:
<html>
<body>
<p>hi there</p>
<img src='my_pic.jpg'/>
</body>
</html>
但相反,什么都没有出现。
我尝试在写“你好”之后放置一个 response.end(),它显示文本,然后我尝试交换文本和图片的位置(包括标题),它显示了图片,但我不知道了解如何让两者同时显示,就像在真实的网页上一样。
你能解释一下如何将不同类型的内容放到同一个网页上——它们是否需要在不同的响应中?我在另一个问题上遇到的事情:
类似的东西看起来像解决方案,但我不知道如何将它应用到我的情况(我在服务器端没有很多经验。)
非常感谢
编辑:从 user568109 的回复中得到它的工作:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(request,response) {
fs.readFile('my_pic.jpg', function(error, file) {
var imagedata = new Buffer(file).toString('base64');
response.writeHead(200, {'content-type':'text/html'});
response.write("hi there!<img src='data:my_pic.jpg;base64,"+imagedata+"'/>");
response.end();
});
});
var port = process.env.PORT || 8080;
server.listen(port, function() {
console.log('Listening on port' + port);
});
不过,这似乎在嵌入图像方面需要做很多工作——如果我想放入多个图像,我就必须继续嵌套那些文件流回调?
我也尝试过这种方式,但它不起作用:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(request,response) {
response.writeHead(200, {'content-type':'text/html'});
response.write("hi there!<img src='my_pic.jpg'/>");
response.end();
});
var port = process.env.PORT || 8080;
server.listen(port, function() {
console.log('Listening on port' + port);
});
我不确定这是否是人们所说的意思
response.write('<img src="my_pic.jpg"/>')
,因为服务器似乎没有代表我发出另一个请求来获取图像?它只是显示一个损坏的图标图像。