Проверить, открыл ли пользователь статический файл в Express? - PullRequest
0 голосов
/ 30 ноября 2018

Я обслуживаю статические файлы, используя:

app.use(express.static('static'));

У меня есть index.html и куча других файлов в ./static/, который отображается на http://localhost:8080.

Есть ли способ, как я могу перехватить запрос GET и выяснить, когда пользователь открыл статический файл?Я пытался

app.get('/', (req, res) => { console.log("Opened!") }

, но это не работает.

1 Ответ

0 голосов
/ 30 ноября 2018

РЕДАКТИРОВАТЬ: Спасибо @robertklep за рефакторинг моего решения, который хорошо оборачивает все это.Вот гораздо более краткое решение, которое уведомляет вас о том, что любой статический файл обслуживается, и печатает его URL:

const express = require("express");
const app = express();

const static = express.static('static');

app.use(function(req, res, next) {
    // declare a handler for the "request end" event
    function staticReqNotifier() {
        console.log("static file was served", req.url);
    }

    // listen to that event in before the static middleware is invoked
    req.on("end", staticReqNotifier);

    // manually invoke the static middleware with this middleware's arguments
    // we define the static middleware's next function - if it's called, the 
    // resource requested is not static so detach the listener and forward the response
    static(req, res, (err) => {
        req.off("end", staticReqNotifier);
        next(err);
    });
});

// test endpoint so show non-static requests work fine
app.get("/", function(req, res) {
    res.send("test");
});

app.listen(3000);

Поскольку любой экспресс-запрос может быть выполнен не более чем одним промежуточным программным обеспечением, прослушивание «запроса имеетзакончилась "событие до статического промежуточного программного обеспечения и отсоединение его после того, как мы убедились, что статическое промежуточное программное обеспечение не выполнило, запроса достаточно.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...