【问题标题】:Setting a document root to your Node.js http server?为您的 Node.js http 服务器设置文档根目录?
【发布时间】:2011-08-14 22:09:04
【问题描述】:

我只是在我的本地机器上用 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); 

【问题讨论】:

    标签: javascript node.js websocket socket.io


    【解决方案1】:

    对于 background-image 样式,浏览器会创建一个全新的 HTTP 请求到你的服务器,路径为 *img/carbon_fiber.gif*,这个请求肯定会命中你的匿名函数,但你的响应函数只会写回一个 div with ContentType: 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不是很熟悉,所以上面的代码只演示了一个逻辑,并没有展示实际的可运行代码块。

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 2020-02-14
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2014-05-10
      相关资源
      最近更新 更多