Question

Je viens de configurer un serveur de base avec Node.js socket.io sur ma machine locale. Y at-il un moyen de définir une racine de document afin que vous pouvez inclure d'autres fichiers. C'est à dire. Ci-dessous j'ai un DIV avec une image d'arrière-plan. Le chemin est l'image par rapport à l'emplacement du serveur, mais cela ne fonctionne pas. Des idées? Merci!

var http = require('http'),  
    io = require('socket.io'), // for npm, otherwise use require('./path/to/socket.io') 

server = http.createServer(function(req, res){ 
 // your normal server code 
 res.writeHead(200, {'Content-Type': 'text/html'}); 
 res.end('<div style="background-image:url(img/carbon_fibre.gif);"><h1>Hello world</h1></div>'); 
});
server.listen(8080);

// socket.io 
var socket = io.listen(server); 
Était-ce utile?

La solution

Pour le style image d'arrière-plan, le navigateur crée une toute nouvelle requête HTTP à votre serveur avec le chemin * img / carbon_fibre.gif *, et cette demande va certainement frapper votre fonction anonyme, mais votre fonction de réponse écrite seulement revenir un < em> div avec ContentType:. text / html quel que soit le req.pathname afin que l'image ne peut pas être correctement affiché

Vous pouvez ajouter du code à votre fonction comme:

var http = require('http'),  
    io = require('socket.io'),
    fs = require('fs'),
    server = http.createServer(function(req, res){ 
        // find static image file
        if (/\.gif$/.test(req.pathname)) {
            fs.read(req.pathname, function(err, data) {
                res.writeHead(200, { 'Content-Type': 'image/gif' });
                res.end(data);
            });
        }
        else {
            // write your div
        }
    });
server.listen(8080);

Je ne suis pas très familier avec nodejs, de sorte que le code ci-dessus démontre qu'une logique mais pas le bloc de code exécutable réel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top