【发布时间】:2012-07-13 11:43:24
【问题描述】:
我已经看到并使用过:
app.use("/css", express.static(__dirname + '/css'));
我不希望提供根目录中的所有文件,只提供一个文件“ipad.htm”。使用 express.js 以最少的代码量做到这一点的最佳方法是什么?
【问题讨论】:
我已经看到并使用过:
app.use("/css", express.static(__dirname + '/css'));
我不希望提供根目录中的所有文件,只提供一个文件“ipad.htm”。使用 express.js 以最少的代码量做到这一点的最佳方法是什么?
【问题讨论】:
res.sendFile(path_to_file); 就是你所需要的;它会自动设置正确的标题并传输文件(它在内部使用与express.static相同的代码)。
在小于 4 的 express 版本中,使用 sendfile 而不是 sendFile。
【讨论】:
res.sendfile(relativePath, {root: theDirectory})
app.get('css', function (req, res) { ... })吗?
sendfile 已被弃用,取而代之的是带有大写 F 的 sendFile。以 uuid.js 为例,对我有用的是app.get('js/uuid.js', function(req, res) { res.sendFile('uuid.js', {root: 'node_modules/node-uuid'}); });
app.use("/css/myfile.css", express.static(__dirname + '/css/myfile.css'));
【讨论】:
app.use("/", express.static(__dirname + "/index.html")) 给我一个 404。 app.use("/", express.static(__dirname)) 工作。
index.html,因此无法对此发表评论——但此解决方案适用于标准/文件名指定的情况。 (快速版本:4.17.1)
如果您只想提供单个静态文件,可以使用此语法(示例基于原始问题,根目录下的 ipad.htm):
app.use('/ipad.htm', express.static(__dirname, {index: 'ipad.htm'}));
express.static(dir) 的默认行为是它会尝试从所需的dir 发送一个“index.html”文件。 index 选项会覆盖此行为,并允许您选择预期的文件。
【讨论】:
app.use('/favicon.ico', express.static('img/base', {index: 'favicon.ico'}));
我发布了一个用于提供单个静态文件的小型库: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”,它不会突然开始为整个目录提供服务。
【讨论】:
require('fs').readFile(pathOfTheFile, (err, data) => {...})
以 JoWie 的回答为基础的快速示例:
npm install 连接静态文件
npm install express
var express = require('express');
var staticFile = require('connect-static-file');
var path = 'pathto/myfile.txt';
var options = {};
var uri = '/';
var app = express();
var port = 3000;
app.use(uri, staticFile(path, options));
app.listen(port, () => console.log(`Serving ${path} on localhost:${port}${uri}`));
【讨论】:
fs.createReadStream(path).pipe(res);
【讨论】:
Content-Type 和 Content-Length 标头。