我正在尝试使用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,但它不起作用。
希望你们知道,什么是错的,可以帮助新手出去!
答案 0 :(得分:0)
您的服务器无法以正确的方式工作,在您阅读文件'/game.html'的内容的每个请求上(您可以阅读并缓存,只更新一些更改),您回复每个请求(!)与html文件的内容没有任何检查,并在您检查请求的扩展名后(但它已被响应),如果它是真的你再次写入响应(这里你应该有一些错误)在节点的控制台中,你不能在可写流中写完。
我有2个解决方案:
//难以解决的问题
/* 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
}
}
//简单的解决方案
我建议你使用我的模块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
*/