node.js,express.js - 提供单个静态文件的最简单方法是什么?

Jam*_*ers 49 node.js express

我已经看到并利用了:

app.use("/css", express.static(__dirname + '/css'));
Run Code Online (Sandbox Code Playgroud)

我不希望从根目录提供所有文件,只有一个文件'ipad.htm'.使用express.js,使用最少量的代码执行此操作的最佳方法是什么?

ebo*_*man 93

res.sendFile(path_to_file);是你所需要的全部; 它会自动设置正确的标题并传输文件(它在内部使用相同的代码express.static).

  • 我从这里得到403s.我不得不做`res.sendfile(relativePath,{root:theDirectory})` (6认同)
  • 如果你的文件夹在正在运行的JS文件之外,我会在@ kumar303注释中添加一些细节:你不能把"../"放在relativePath中,但你可以在目录中添加它.res.sendfile(pic.png,{root:__dirname +"../../../ images /"}) (2认同)
  • 在Express 4.x中,看起来全部小写的`sendfile`不赞成使用带有大写字母F的`sendFile`.对我来说,使用`uuid.js`作为我的例子,对我来说是'app.get(') js/uuid.js',function(req,res){res.sendFile('uuid.js',{root:'node_modules/node-uuid'});});` (2认同)

Gre*_*hus 9

app.use("/css/myfile.css", express.static(__dirname + '/css/myfile.css'));
Run Code Online (Sandbox Code Playgroud)

  • 我得到一些奇怪的303行为,指向路径加上斜线.似乎静态只应该在dirs上工作. (3认同)
  • 这很奇怪,它对我有用。我有 app.use('/', express.static(__dirname + '/wwwroot/index.html')); 我认为他们 app.use 调用出现的顺序确实有所不同。因此,请确保您没有先将其映射到给出 404 的其他地方。 (2认同)

ye *_*obe 7

如果您只想提供单个静态文件,则可以使用以下语法(基于原始问题的示例,根目录下的 ipad.htm):

app.use('/ipad.htm', express.static(__dirname, {index: 'ipad.htm'}));
Run Code Online (Sandbox Code Playgroud)

express.static( dir )的默认行为是它会尝试从所需的dir发送一个“index.html”文件。该指数选项覆盖此行为,并让您挑选预期的文件,而不是。


JoW*_*Wie 5

我发布了一个用于服务单个静态文件的小型库:https : //www.npmjs.com/package/connect-static-file

npm install connect-static-file

var staticFile = require('connect-static-file'); app.use('/ipad', staticFile(__dirname + '/ipad.html'));

与 express.static 的主要区别在于它不关心请求 url,如果路由匹配,它总是提供该文件。如果您将目录命名为“ipad.html”,它不会突然开始为整个目录提供服务。


Pic*_*els -4

 fs.createReadStream(path).pipe(res);
Run Code Online (Sandbox Code Playgroud)

  • 您需要事先明确写出至少“Content-Type”和“Content-Length”标头。 (4认同)