0

我正在尝试使用 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,但它不起作用。

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

4

1 回答 1

0

您的服务器无法以正确的方式工作,在每次请求时您都读取文件“/game.html”的内容(您可以读取并缓存它,仅在所做的一些更改时更新),您响应每个请求(! ) 没有任何检查的 html 文件的内容,并且在检查请求的扩展名之后(但它已经被响应),如果它是真的,你再次写入响应(这里你应该在节点的控制台中有一些错误),您不能在可写流中结束后写入。

我有两个解决方案:

  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 的强大功能。只需将所有文件放在一个文件夹中,例如“静态”,然后使用以下代码:

    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
    */
    
于 2013-07-28T19:44:33.967 回答