繁体   English   中英

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM