私は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>
しかし、代わりに、何も表示されていません。
テキストを表示する「hithere」を書き込んだ後、response.end()を入れてみました。その後、画像を表示するテキストと画像(ヘッダーを含む)の場所を入れ替えてみましたが、わかりません。実際のWebページのように、両方を同時に表示する方法を説明します。
同じウェブページにさまざまな種類のコンテンツを配置する方法を説明できますか?それらはさまざまな応答である必要がありますか?私が別の質問に出くわした何か:
そのようなものは解決策のように見えますが、これを自分の状況に適用する方法がわかりません(サーバー側の経験はあまりありません)。
どうもありがとう
編集: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"/>')
、サーバーが私に代わって画像をフェッチするための別のリクエストを行っていないようです。壊れたアイコン画像を表示しているだけです。