簡體   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