Node.js – 使用sendFile将文件发送到客户端

我对Node.js非常陌生,一直在关注游戏制作教程,在这里可以find: http : //rawkes.com/articles/creating-a-real-time-multiplayer-game-with-websockets-and-node html的

我正在尝试通过将所有必要的文件发送到客户端来改进教程中详细介绍的游戏。

当我连接到我的服务器作为客户端,这个错误是抛出在服务器端,

_http_outgoing.js:344 throw new Error('Can\'t set headers after they are sent.'); ^ Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11) at Array.write (/Users/Mark/node_modules/express/node_modules/finalhandler/index.js:164:9) at listener (/Users/Mark/node_modules/express/node_modules/on-finished/index.js:169:15) at onFinish (/Users/Mark/node_modules/express/node_modules/on-finished/index.js:100:5) at callback (/Users/Mark/node_modules/express/node_modules/on-finished/node_modules/ee-first/index.js:55:10) at IncomingMessage.onevent (/Users/Mark/node_modules/express/node_modules/on-finished/node_modules/ee-first/index.js:93:5) at emitNone (events.js:67:13) at IncomingMessage.emit (events.js:166:7) at endReadableNT (_stream_readable.js:921:12) at nextTickCallbackWith2Args (node.js:442:9) 

这是有问题的代码:

 var util = require("util"), Player = require("./Player").Player; var app = require('express')(); var http = require('http'); var httpServer = http.createServer(app); httpServer.listen(8000) var io = require('socket.io'); var socket, players; app.get('/', function(req, res){ res.sendFile(__dirname + '/public/index.html'); res.sendFile(__dirname + '/public/js/game.js'); res.sendFile(__dirname + '/public/js/Keys.js'); res.sendFile(__dirname + '/public/js/Player.js'); res.sendFile(__dirname + '/public/js/requestAnimationFrame.js'); res.sendFile(__dirname + '/public/style/game.css'); res.sendFile(__dirname + '/public/style/reset.css'); }); function init() { players = []; socket = io.listen(httpServer) //streamline socket.configure(function() { socket.set("transports", ["websocket"]); socket.set("log level", 2); }); setEventHandlers() } init() 

任何build议获得这个代码工作将不胜感激。 我敢肯定,解决scheme是显而易见的,但我找不到任何东西似乎工作。

一个请求发送一个文件。 您不能多次调用res.sendFile()来完成相同的请求(您也不应该)。 如果这是一个正在被<script>标签和<style>标签请求的HTML页面,那么浏览器将请求由这些标签指定的具有不同请求的其他文件。 您可以在您的快速应用程序中为它们创build路线,以便在客户端请求它们时,您将发送符合所需要求的相应文件。

您可以使用express.static()为所有静态文件设置一行代码的路由处理。

但是,这里的关键是app.get('/')是仅用于页面的HTML的路由处理程序。 浏览器然后将请求该页面中的其他资源,您也需要这些资源的路由。 你不只是一个请求发送多个文件。