如何记录通过 express.static 请求的文件
how to log the file requested via express.static
这是我的代码
var express=require("express");
var app=express();
var port=8181;
app.use(express.static(__dirname));
app.listen(port);
它正在正确提供静态文件
我想在请求扩展名为 .xls 的文件时记录
我怎样才能实现它?
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);
随心所欲
var express=require("express");
var app=express();
var port=8181;
app.use(function(req, res, next) {
// check for .xls extension
console.log(req.originalUrl);
next();
}, express.static(__dirname));
app.listen(port);
您想记录 serve-static (express.static
) 给出的响应。有几种方法可以做到这一点。
方法一手工校验的中间件
您可以在 express.static
之前放置 (app.use
) 一个中间件,用于记录针对 express.static
的请求。 Rodrigo Medeiros' answer 这样做。但是这样,当 serve-static 中间件的选项发生变化时,你必须重写检查代码,这可能是一个维护问题。
方法二挂钩到express.static
;从中泄露信息。
好吧,express.static
知道它提供的最好的文件。不幸的是,它只是不让我们知道并记录它。但是有一个技巧:the setHeaders
option,这是一个回调函数,据说用于设置自定义响应 headers。当 express.static
做出响应并获得足够的信息来记录您想要记录的内容时,它会被调用。
const express = require("express");
const path = require("path");
const app = express();
const asset_dir_path = "assets/";
app.use(express.static(asset_dir_path, {
index: false,
setHeaders: (response, file_path, file_stats) => {
// This function is called when “serve-static” makes a response.
// Note that `file_path` is an absolute path.
// Logging work
const relative_path = path.join(asset_dir_path, path.relative(asset_dir_path, file_path));
console.info(`@${Date.now()}`, "GAVE\t\t", relative_path);
}
}));
这是我的代码
var express=require("express");
var app=express();
var port=8181;
app.use(express.static(__dirname));
app.listen(port);
它正在正确提供静态文件
我想在请求扩展名为 .xls 的文件时记录
我怎样才能实现它?
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);
随心所欲
var express=require("express");
var app=express();
var port=8181;
app.use(function(req, res, next) {
// check for .xls extension
console.log(req.originalUrl);
next();
}, express.static(__dirname));
app.listen(port);
您想记录 serve-static (express.static
) 给出的响应。有几种方法可以做到这一点。
方法一手工校验的中间件
您可以在 express.static
之前放置 (app.use
) 一个中间件,用于记录针对 express.static
的请求。 Rodrigo Medeiros' answer 这样做。但是这样,当 serve-static 中间件的选项发生变化时,你必须重写检查代码,这可能是一个维护问题。
方法二挂钩到express.static
;从中泄露信息。
好吧,express.static
知道它提供的最好的文件。不幸的是,它只是不让我们知道并记录它。但是有一个技巧:the setHeaders
option,这是一个回调函数,据说用于设置自定义响应 headers。当 express.static
做出响应并获得足够的信息来记录您想要记录的内容时,它会被调用。
const express = require("express");
const path = require("path");
const app = express();
const asset_dir_path = "assets/";
app.use(express.static(asset_dir_path, {
index: false,
setHeaders: (response, file_path, file_stats) => {
// This function is called when “serve-static” makes a response.
// Note that `file_path` is an absolute path.
// Logging work
const relative_path = path.join(asset_dir_path, path.relative(asset_dir_path, file_path));
console.info(`@${Date.now()}`, "GAVE\t\t", relative_path);
}
}));