如何通过express.static记录请求的文件

ahh*_*arr 13 node.js express

这是我的代码

var express=require("express");
var app=express();
var port=8181;
app.use(express.static(__dirname));
app.listen(port);
Run Code Online (Sandbox Code Playgroud)

它正确地提供静态文件

我想在请求扩展名为.xls的文件时进行记录

我怎么能实现它?

Rod*_*ros 15

path核心模块给你处理这个工具.因此,只需将此逻辑放在静态中间件之前的中间件中,例如:

var express = require("express");
var path = require("path");

var app = express();
var port = 8181;

app.use(function (req, res, next) {
    var filename = path.basename(req.url);
    var extension = path.extname(filename);
    if (extension === '.css')
        console.log("The file " + filename + " was requested.");
    next();
});
app.use(express.static(__dirname));

app.listen(port);
Run Code Online (Sandbox Code Playgroud)


Кон*_*Ван 6

您想要记录serve-static ( express.static)给出的响应。有几种方法可以做到这一点。

\n\n

Method \xe2\x85\xa0用于手动检查的中间件。

\n\n

您可以在, 之前放置 ( app.use) 一个记录请求的中间件(如果该请求是针对 , 的话)。罗德里戈·梅代罗斯的回答就是这样做的。但这样,当服务静态中间件的选项发生变化时,您必须重写代码进行检查,这可能是一个维护问题。express.staticexpress.static

\n\n

方法 \xe2\x85\xa1挂钩到express.static; 从中泄露信息。

\n\n

好吧,express.static知道它提供的文件最好。不幸的是,它只是不让我们知道并记录它。但这有一个技巧:option ,这是一个回调函数setHeaders据说用于设置自定义响应标头。express.static当做出响应并获得足够的信息来记录您想要记录的内容时,就会调用它。

\n\n
const express = require("express");\nconst path = require("path");\nconst app = express();\nconst asset_dir_path = "assets/";\n\napp.use(express.static(asset_dir_path, {\n    index: false,\n    setHeaders: (response, file_path, file_stats) => {\n        // This function is called when \xe2\x80\x9cserve-static\xe2\x80\x9d makes a response.\n        // Note that `file_path` is an absolute path.\n\n        // Logging work\n        const relative_path = path.join(asset_dir_path, path.relative(asset_dir_path, file_path));\n        console.info(`@${Date.now()}`, "GAVE\\t\\t", relative_path);\n    }\n}));\n
Run Code Online (Sandbox Code Playgroud)\n