Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js-使用sendFile向客户端发送文件_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript Node.js-使用sendFile向客户端发送文件

Javascript Node.js-使用sendFile向客户端发送文件,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我是Node.js的新手,一直在学习游戏制作教程,可以在这里找到: 我试图通过向客户端发送所有必要的文件来改进教程中详细介绍的游戏 当我作为客户端连接到服务器时,服务器终端会抛出此错误 \u http\u outgoing.js:344 抛出新错误('发送头后无法设置头'); ^ 错误:发送邮件后无法设置邮件头。 在ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:344:11) 在Array.write(/Users/Mar

我是Node.js的新手,一直在学习游戏制作教程,可以在这里找到:

我试图通过向客户端发送所有必要的文件来改进教程中详细介绍的游戏

当我作为客户端连接到服务器时,服务器终端会抛出此错误

\u http\u outgoing.js:344
抛出新错误('发送头后无法设置头');
^
错误:发送邮件后无法设置邮件头。
在ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:344:11)
在Array.write(/Users/Mark/node\u modules/express/node\u modules/finalhandler/index.js:164:9)
在侦听器上(/Users/Mark/node_modules/express/node_modules/on finished/index.js:169:15)
在onFinish(/Users/Mark/node_modules/express/node_modules/on finished/index.js:100:5)
在回调时(/Users/Mark/node_modules/express/node_modules/on finished/node_modules/ee first/index.js:55:10)
在IncomingMessage.onevent(/Users/Mark/node_modules/express/node_modules/on finished/node_modules/ee first/index.js:93:5)
在emitNone(events.js:67:13)
在IncomingMessage.emit(events.js:166:7)
在endReadableNT(_stream_readable.js:921:12)

在下一个TTickCallbackwith2args(node.js:442:9)
一个请求发送一个文件。您不能为同一请求多次调用
res.sendFile()
(您也不应该)。如果这是一个HTML页面,其中包含
标记和
标记,则浏览器将通过单独的请求请求这些标记指定的其他文件。您可以在express应用程序中为它们创建路由,这样当客户端请求路由时,您将发送与这些请求匹配的适当文件

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


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

您是否在响应对象上调用了
setHeader
?一个请求发送一个文件。您不能多次调用
res.sendFile()
。客户端将请求其他文件,您将在express应用程序中为它们创建路由,因此当客户端请求它们时,您将发送与所需请求匹配的适当文件。您可以使用
express.static()
为所有静态文件设置路由处理,只需一行代码。@jfriend00您可以将其作为答案发布吗?这是问题的正确答案。@GuidoGarcía-答案贴出。谢谢你的帮助!我想我已经正确地实现了它,但是现在我遇到了一个新的错误,客户端似乎无法在服务器上找到我的socket.io.js文件。我想我把它安装正确了。我的服务器文件中有一个名为node modules的文件,其中安装了socket.io。Chrome抛出了这个错误:GET我试图将index.html页面直接指向节点模块中的socket.io.js文件,但返回了相同的错误。