Node.js 如何记录通过express.static请求的文件
这是我的密码Node.js 如何记录通过express.static请求的文件,node.js,express,Node.js,Express,这是我的密码 var express=require("express"); var app=express(); var port=8181; app.use(express.static(__dirname)); app.listen(port); 它正确地服务于静态文件 我想在请求扩展名为.xls的文件时进行日志记录 如何实现它?核心模块为您提供了处理此问题的工具。因此,只需将此逻辑放在静态中间件之前的中间件中,如: 照办 var express=require("express");
var express=require("express");
var app=express();
var port=8181;
app.use(express.static(__dirname));
app.listen(port);
它正确地服务于静态文件
我想在请求扩展名为.xls的文件时进行日志记录
如何实现它?核心模块为您提供了处理此问题的工具。因此,只需将此逻辑放在静态中间件之前的中间件中,如:
照办
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);
您想记录SERVICE static(express.static
)在响应中给出的内容。有几种方法可以做到这一点
方法Ⅰ:手动检查的中间件。
如果请求是针对express.static
,您可以将(app.use
)一个中间件放在express.static
之前记录请求。这样做。但是通过这种方式,当serve静态中间件的选项更改时,您必须重写代码以进行检查,这可能是一个维护问题
方法二挂钩到express.static
;泄露信息。
嗯,express.static
知道它提供的文件最好。不幸的是,它没有让我们知道并记录它。但有一个黑客攻击:,这是一个回调函数,据说用来设置自定义响应头。当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);
}
}));
@ahhmar注意,顺序很重要,如果您将静态中间件放在记录器中间件之上,则会发送响应,并且不会调用记录器
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);
}
}));