当前位置: 首页 > 面试题库 >

使用Express将整个文件夹内容发送到客户端

叶文博
2023-03-14
问题内容

我制作了一个html5游戏(使用GameMaker),该游戏由index.html和一个文件夹“ html5game”组成,该文件夹包含游戏的依赖项-
javascript代码和资源。问题在于资源非常丰富多样(声音,子画面等),客户需要它们全部发挥作用。

我正在寻找一种无需全部命名就可以全部发送邮件的方法。

我尝试了glob模块:

var glob = require( 'glob' );

var files = glob.sync( './html5game/**' ).forEach( function( file ) {
      require( path.resolve( file ) );
});

但是一旦完成,我就找不到使用res.sendFile()发送文件的方法。

我试过了

var express = require('express');
var app = express();

[...]

app.get('/aeronavale/jeu', function(req, res){
        res.sendFile(__dirname + '/aeronavale/index.html');
        res.sendFile(files)

});

[...]

app.listen(3000, function(){
    console.log('app started on port 3000, yeah !')
})

但这给了我错误:

TypeError: path argument is required to res.sendFile

如果您有其他解决方案,我也很感兴趣。感谢您的回答!


问题答案:

您将无法使用发送多个文件res.sendFile。您可以在此处执行的最直接的操作是:

将您的index.html文件和html5game目录放入某个通用目录,例如html,并将其放在您的Node.js程序所在的位置。目录布局的示例为:

/home/you/yourapp:
- app.js (your node program)
- package.json (your package.json etc)
- html (a new directory)
  - index.html (your main html to serve)
  - html5game (the directory with other files)
    - (other files)

现在,在您的Node程序中,您可以使用如下代码:

var path = require('path');
var express = require('express');
var app = express();

var htmlPath = path.join(__dirname, 'html');

app.use(express.static(htmlPath));

var server = app.listen(3000, function () {
    var host = 'localhost';
    var port = server.address().port;
    console.log('listening on http://'+host+':'+port+'/');
});

这将index.html在以下地址上提供您所有文件(包括)的地址:

  • http:// localhost:3000 /(您的index.html
  • http:// localhost:3000 / html5game / xxx.js(您的资产)

当然,您仍然需要确保index.html正确引用文件中的资产,例如:

<script src="/html5game/xxx.js"></script>

在上述示例布局的情况下。

index.html通常会调用包含您的静态资产(您拥有)的顶层目录staticpublic或者html,只要您在调用中使用正确的路径,就可以随意调用它express.static()

如果您想在根目录路径以外的其他路径中使用游戏,则可以将其指定为app.use。例如,如果您更改此设置:

app.use(express.static(htmlPath));

对此:

app.use('/game', express.static(htmlPath));

然后代替这些URL:

  • http:// localhost:3000 /(您的index.html
  • http:// localhost:3000 / html5game / xxx.js(您的资产)

这些网址将改为可用:

  • http:// localhost:3000 / game /(您的index.html
  • http:// localhost:3000 / game / html5game / xxx.js(您的资产)

这里有很多问题与使用Express提供静态文件有关,因此我制作了一个工作示例并将其发布在GitHub上,以便人们可以有一个工作的起点并从那里开始:

  • https://github.com/rsp/node-express-static-example


 类似资料:
  • 问题内容: 您好,我一直在尝试将文件从node.js发送到客户端。 我的代码有效,但是当客户端转到指定的url()时,它将流式传输文件。 从Google Chrome浏览器访问该文件可使文件(.mp3)在播放器中播放。 我的目标是让客户的浏览器下载文件,然后问客户他想在哪里存储文件,而不是在网站上流式传输。 问题答案: 您需要设置一些标题标志。 用下载代替流媒体;

  • 问题内容: 我使用此功能将html文件发送到客户端,但是在客户端中我什么也没有得到(空白页),没有错误。我有什么问题吗?,请帮忙? 我的test.html文件 问题答案: 尝试这样的代码: 使用res.sendFile而不是手动读取文件,以便express可以为您正确设置内容类型。 您不需要这行,因为这是由express内部处理的。

  • 问题内容: 我正在尝试从服务器向客户端发送文件,即服务器请求的客户端。客户端指定中的文件,然后将其发送到服务器,服务器将文件大小添加到文件中,然后将其返回给客户端。 客户端向其管道添加具有正确文件大小的新文件。 服务器使用上下文和所需文件创建一个新文件,并尝试发送该文件,但是从不读取该字节。 我在这里做错了什么? 记录 客户 FileRequestHandler.java FileChunkReq

  • 问题内容: 我正在尝试找到一种方法,将不同文件类型的文件从服务器发送到客户端。 我在服务器上有以下代码将文件放入字节数组: 然后,我将fileData作为字符串发送给客户端。这对于txt文件效果很好,但是当涉及到图像时,我发现尽管它可以很好地创建包含数据的文件,但图像无法打开。 我不确定我是否正在按照正确的方式进行操作。谢谢您的帮助。 问题答案: 如果要读取/写入二进制数据,则应使用字节流(Inp

  • 我正在使用Datagramsocket和DatagramPacket制作一个简单的server_client应用程序。我想做的是:一个客户端将数据发送到服务器,服务器将这些数据发送到另一个客户端。问题是服务器从第一个客户端接收数据,但不将它们发送到另一个客户端,我怎么知道我将发送到的客户端的端口?端口没有改变吗? 这是客户端类: 服务器类: }

  • 我不确定这是否可能,但我希望在客户端看到req对象的全部内容。 这将导致如下错误: TypeError:将循环结构转换为JSON