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

node.js,express.js-为单个静态文件提供服务的最简单方法是什么?,node.js,express,Node.js,Express,我已经看到并利用了: app.use("/css", express.static(__dirname + '/css')); 我不希望提供根目录中的所有文件,只提供一个文件“ipad.htm”。使用express.js以最少的代码量完成此任务的最佳方法是什么?res.sendfile(路径到文件)是您所需要的全部;它将自动设置正确的标题并传输文件(内部使用与express.static)相同的代码) fs.createReadStream(path).pipe(res); 在expres

我已经看到并利用了:

app.use("/css", express.static(__dirname + '/css'));
我不希望提供根目录中的所有文件,只提供一个文件“ipad.htm”。使用express.js以最少的代码量完成此任务的最佳方法是什么?

res.sendfile(路径到文件)是您所需要的全部;它将自动设置正确的标题并传输文件(内部使用与
express.static
)相同的代码)

 fs.createReadStream(path).pipe(res);

在express版本4或更高版本中,使用sendFile而不是sendFile。

我发布了一个用于提供单个静态文件的小型库:

app.use("/css/myfile.css", express.static(__dirname + '/css/myfile.css'));
npm安装连接静态文件

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


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

基于JoWie的答案的快速示例:

npm安装连接静态文件

npm安装快车

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}`));

如果您确实希望为单个静态文件提供服务,可以使用以下语法(基于原始问题的示例,根目录下的ipad.htm):


express.static(dir)的默认行为是,它将尝试从所需的dir发送一个“index.html”文件。索引选项会覆盖此行为,并允许您选择所需的文件。

您需要事先明确写出至少
内容类型
内容长度
标题。
app.use(“/”,express.static(u dirname+“/index.html”)
为我给出了404
app.use(“/”,express.static(_dirname))
有效。奇怪的是,它确实对我有效。我有app.use('/',express.static(uu dirname+'/wwwroot/index.html');我认为他们app.use calls出现的顺序确实会有所不同。所以确保你没有先把它映射到其他地方,那就是404。我得到一些奇怪的303行为,指向路径加上一条斜线。似乎只有static应该在dirs上工作。与serve static也一样。我没有将其用于
index.html
,因此无法对此发表评论——但此解决方案适用于指定标准/文件名的情况。(快速版本:4.17.1)我从中得到了403。我必须执行
res.sendfile(relativePath,{root:theDirectory})
如果您的文件夹在运行的JS文件之外,我会在@kumar303注释中添加一些细节:您不能将“./”放在relativePath中,但您可以将其添加到该目录中。res.sendfile(pic.png,{root:uu dirname+”../../../../../../images/“})与
app.get('css',function(req,res){…})
?我发现在Express4.x中相对于项目根进行如下操作很有用:path.join(path.dirname(require.main.filename),'/relative/to/project/root/file.html),看起来所有小写的
sendfile
都被弃用,取而代之的是带有大写字母F的
sendfile
。以
uuid.js
为例,对我有效的是
app.get('js/uuid.js',function(req,res){res sendfile('uuid.js',{root:'node_modules/node uuid'})require('fs').readFile(pathOfTheFile,(err,data)=>{…})
唯一修复恼人的favicon 404请求的解决方案<代码>app.use('/favicon.ico',express.static('img/base',{index:'favicon.ico'}))
app.use('/ipad.htm', express.static(__dirname, {index: 'ipad.htm'}));