Nodejs: Comment faire revenir les différents types de contenu avec la même réponse (texte et image)?

J'essaie d'apprendre à nodejs et j'ai pensé que la meilleure façon de le faire serait d'essayer de faire des trucs sans l'aide d'exprimer ou de toute autre non-modules de base. Je suis coincé à essayer de faire un peu de texte et une image pour être livré en même temps. Le code que j'essaie est:

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

Idéalement, devrait être livré est:

<html>
<body>
<p>hi there</p>
<img src='my_pic.jpg'/>
</body>
</html>

Mais au lieu de cela, rien n'apparaît.

J'ai essayé de mettre une réponse.fin() après avoir écrit "salut", qui affiche le texte, et après que j'ai essayé de permuter les endroits du texte et de l'image (en-têtes inclus), qui affiche la photo, mais je ne peux pas comprendre comment obtenir à la fois pour afficher simultanément, comme sur une vraie page web.

Pouvez-vous expliquer comment mettre à différents types de contenus sur la même page web - faire dont ils ont besoin pour être des réponses différentes? Quelque chose que je suis tombé sur une autre question:

nodejs - Comment lire et de sortie d'image jpg?

Quelque chose comme ça ressemble à la solution, mais je ne peux pas comprendre comment l'appliquer à ma situation (je n'ai pas beaucoup d'expérience dans le côté serveur de choses.)

Merci beaucoup

EDIT: j'ai travailler à partir de user568109 réponse:

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

Cela ressemble à beaucoup de travail dans l'incorporation des images - si je voulais mettre plus d'une image, je dois juste garder l'imbrication de ces filestream rappels?

J'ai aussi essayé de cette façon mais ça ne fonctionne pas:

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

Je n'étais pas sûr si c'est ce que les gens voulait dire par la ligne de

response.write('<img src="my_pic.jpg"/>')

car le serveur ne semble pas être en faire une autre demande en mon nom pour aller chercher l'image? C'est juste montrant une fracture de l'image de l'icône.

On dirait que vous essayez de caser 2 requêtes HTTP sur une réponse. Vraiment, vous devriez tout simplement écrire le response.write('<img src="my_pic.jpg"/>'); et puis le navigateur télécharge le code HTML d'abord et ensuite faire une demande distincte pour le télécharger my_pic.jpg
On dirait que vous voulez envoyer un multipart réponse - comme c'est étrange. Je ne sais pas si n'importe quel navigateur peut le manipuler. La réponse doit être interprété côté client, je pense.
double possible de Construire Multi-partie de la réponse http à l'aide de node.js

OriginalL'auteur xdl | 2013-02-14