0

我只是在我的本地机器上用 socket.io 设置了一个基本的 node.js 服务器。有没有办法设置文档根目录,以便您可以包含其他文件。IE。下面我有一个带有背景图像的 DIV。图像的路径是相对于服务器位置的,但这不起作用。有任何想法吗?谢谢!

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

2 回答 2

3

使用ExpressConnect。示例:https ://github.com/spadin/simple-express-static-server , http://senchalabs.github.com/connect/middleware-static.html

于 2011-04-29T01:30:17.370 回答
2

对于 background-image 样式,浏览器将创建一个全新的 HTTP 请求到您的服务器,路径为 *img/carbon_fiber.gif*,这个请求肯定会命中您的匿名函数,但您的响应函数只写回一个带有 ContentType的div : text/html 而不管 req.pathname 以便图像无法正确显示。

您可以在函数中添加一些代码,例如:

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

我对nodejs不是很熟悉,所以上面的代码只演示了一个逻辑,而不是实际的可运行代码块。

于 2011-04-28T17:46:50.007 回答