Node.js为画布提供图像

时间:2013-07-28 12:45:31

标签: javascript html5 node.js canvas path.js

我正在尝试使用node.js构建一个简单的游戏,以获得有关网络和与之相关的东西的更多知识。但是现在我被卡住了。我一直在拔头发,在网上搜索几个小时,但我似乎无法找到解决办法。我只找到了一些有用的模块,比如path.js和mime.js。

我的服务器代码如下所示:

var http = require("http");
var host = "127.0.0.1";
var port = 3000;
var url = require('url');
var fs = require("fs");
var path = require("path");
var mime = require('mime');

var server = http.createServer(function(request, response) {
    console.log("Request received: " + request.url);
    fs.readFile(__dirname + '/game.html', function(error, data) {
        if (error) {
            response.writeHead(404, {"Content-type":"text/plain"});
            response.end("Sorry, the page was not found");
        } else {
            var holder = url.parse(request.url);
            var ext = path.extname(holder.pathname);
            response.setHeader('Content-type',"" + mime.lookup(ext));
            response.writeHead(200);
            response.end(data);
            if (ext == ".png") {
                response.setHeader('Content-type',"image/png");
                response.writeHead(200);
                response.end(data);
            } else if (ext == ".jpeg") {
                response.setHeader('Content-type',"image/jpeg");
                response.writeHead(200);
                response.end(data);
            }
        }
    });
});

var io = require('socket.io').listen(server);

服务器变量似乎会给我带来问题。 我正在尝试实施的游戏就在这里:http://jsfiddle.net/6mWkU/2/ 没关系图形;)

使用我的服务器代码,不会提供任何图像。我尝试使用path.js和mime.js,因此它为每次调用设置了特定的Content-type,但它不起作用。

希望你们知道,什么是错的,可以帮助新手出去!

1 个答案:

答案 0 :(得分:0)

您的服务器无法以正确的方式工作,在您阅读文件'/game.html'的内容的每个请求上(您可以阅读并缓存,只更新一些更改),您回复每个请求(!)与html文件的内容没有任何检查,并在您检查请求的扩展名后(但它已被响应),如果它是真的你再次写入响应(这里你应该有一些错误)在节点的控制台中,你不能在可写流中写完。

我有2个解决方案:

  1. //难以解决的问题

    /* Inside the createServer callback */
    if (request.url === '/') {
        // read the file and respond with html
    } else {
        if (/* check for the existence of the urls */) {
            // get the content of the file and respond with it's content and content-type
            // and don't forget to do this asynchronously!
        } else {
            // return 404
        }
    }
    
  2. //简单的解决方案

    我建议你使用我的模块simpleS,它会为你做一切(!)。将提供静态文件,并让您有机会使用websockets的力量。只需将所有文件放在文件夹中,例如“static”,然后使用以下代码:

    var simples = require('simples');
    
    var server = simples(3000);
    
    server.get('/', function (connection) {
        connection.type('html');
        connection.drain(__dirname + '/game.html');
    });
    
    server.serve(__dirname + '/static');
    
    /*
      And that's all!
      To work with websockets read the documentation please
    */