gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:02:21 26 4
gpt4 key购买 nike

我是 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()多次针对同一个请求(你也不应该)。如果这是用 <script> 请求的 HTML 页面标签和 <style>标签,那么浏览器将通过单独的请求请求这些标签指定的其他文件。您在 Express 应用程序中为它们创建路由,这样当客户请求它们时,您将发送与这些所需请求相匹配的适当文件。

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

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

关于javascript - Node.js - 使用 sendFile 将文件发送到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com