Javascript Node.js为画布提供图像服务

Javascript Node.js为画布提供图像服务,javascript,html,node.js,canvas,path.js,Javascript,Html,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

我正在尝试用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);
服务器变量似乎是导致我出现问题的原因。 我试图实现的游戏就在这里: 不必担心图形;)

使用我的服务器代码,不会提供任何图像。我尝试使用path.js和mime.js,因此每次调用都会设置特定的内容类型,但没有成功


希望你们知道,出了什么问题,可以帮助一个新手

您的服务器无法以正确的方式工作,在每次请求时,您都会读取文件“/game.html”的内容(您可以读取并缓存,仅在进行某些更改时更新),在检查请求的扩展名(但请求已被响应)之后,您会使用html文件的内容来响应每个请求(!),如果您再次写入响应(这里您应该在节点的控制台中有一些错误),则不能在可写流中写入end之后

我为您提供了两种解决方案:

  • //难题

    /* 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
        }
    }
    
  • //简单的解决方案

    我建议你使用我的模块,它会为你做一切(!)。将为静态文件提供服务,并让您有机会使用WebSocket的强大功能。只需将所有文件放入文件夹中,例如“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
    */
    

  • 您这样提供文件服务,而不仅仅是在前端用javascript构建URL并让浏览器加载您的图像,这有什么原因吗?没有理由从服务器上提供这些文件。我现在直接从浏览器中加载了它们,但仍然会遇到这样的错误:资源被解释为图像,但传输时使用MIME类型text/html:“”。