Node.js -发送文件到客户端使用sendFile
Node.js - sending files to client using sendFile
我是Node.js的新手,一直在遵循游戏制作教程,在这里找到: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()
任何关于让这个代码工作的建议将是非常感谢的。我相信解决方案是显而易见的,但我似乎找不到任何工作。
一个请求发送一个文件。对于同一个请求,不能多次调用res.sendFile()
(也不应该)。如果这是一个HTML页面,正在请求与<script>
标签和<style>
标签在它,然后浏览器将请求这些标签与单独的请求指定的其他文件。你在express应用程序中为它们创建路由,这样当客户端请求它们时,你就会发送匹配这些请求的适当文件。
您可以使用express.static()
为所有静态文件设置路由处理,只需一行代码。
但是,这里的关键是app.get('/')
是只针对页面的HTML的路由处理程序。然后浏览器将请求该页中的其他资源,您也需要这些资源的路由。你不能在一个请求中发送多个文件。
res.sendFile()
用于将位于指定路径的文件发送到客户端。
-
一个HTTP GET请求只能有一个响应。在Express中,
res.send()
或res.sendFile()
方法用于将响应发送回客户端。一旦发送了响应,请求-响应周期就完成了。 -
不能同时使用。
-
尝试使用
express.static()
通过传递相对路径来静态访问这些文件
- 客户端服务器REST API captcha实现
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何使用Socket.io将命令从客户端发送到服务器
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 如何将我的javascript库公开给其他客户端使用
- 是否可以使用JavaScript/AAJAX在客户端创建一个文件
- 如何使用Javascript客户端对象模型检索Sharepoint 2010列表项权限
- 返回/从Twit's客户端.get
- 将客户端特定的日期格式返回到服务器MVC4
- MobileFirst:在客户端运行计时器作业-最佳选项
- 标签客户端的设置值
- 我的客户端选项是什么
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 使用javascript在客户端上使用Web服务
- 通过ajax从客户端调用C#方法来执行C#方法
- SignalR客户端启动连接时如何设置用户
- 在使用客户端脚本时拾取JSON对象
- Node.js -发送文件到客户端使用sendFile