как отследить статические файлы на выражении nodejs express - PullRequest
0 голосов
/ 08 апреля 2019

Мне нужно отследить все «статические» файлы, обслуживаемые nodejs express

Я использую app.use (express.static (path.join (__dirname, '/ public')));

Можно ли это сделать?

Я бы хотел использовать простой "console.log (" статическая подача "+ имя файла);

Ответы [ 4 ]

0 голосов
/ 13 апреля 2019

Этот код работает:

const express = require('express') ;
const path    = require('path') ;
const app     = express() ;
const PORT = 3000 ;

app.use( function ( req, res, next ) {
    const { url, path: routePath }  = req ;
    console.log( '### common TimeStamp:', Date.now(), ' - my LOGGER - URL (' + url + '), PATH (' + routePath + ').' ) ;
    next() ;
} ) ; // timestamp all

app.use( express.static( path.join( __dirname, '/public' ) ) ) ;

app.listen(PORT, () => {
  console.log( `app is running on port ${PORT}.` ) ;
} ) ;

Этот код не:

const express = require('express') ;
const path    = require('path') ;
const app     = express() ;
const PORT = 3000 ;

app.use( '/public', function ( req, res, next ) {
    const { url, path: routePath }  = req ;
    console.log( '### common TimeStamp:', Date.now(), ' - my LOGGER - URL (' + url + '), PATH (' + routePath + ').' ) ;
    next() ;
} ) ; // timestamp all

app.use( express.static( path.join( __dirname, '/public' ) ) ) ;

app.listen(PORT, () => {
  console.log( `app is running on port ${PORT}.` ) ;
} ) ;

Почему? Я просто не знаю.

Как видите, единственное отличие состоит в том, что "app.use" имеет "/ public" или нет ...

Мне кажется, "express.static" все это берет ...

0 голосов
/ 08 апреля 2019

Вы можете использовать экспресс для написания промежуточного программного обеспечения для маршрута /public.Как то так:

const express = require('express');
const path = require('path');
const app = express();

const PORT = 3000;

app.use('/public', (req, res, next) => {
    const { url, path: routePath }  = req;
    console.log(url);
    // or
    console.log(routePath);
    next();
});

app.use(express.static(path.join(__dirname, '/public')));

app.listen(PORT, () => {
    console.log(`app is running on ${PORT}`);
});
0 голосов
/ 10 апреля 2019

Я получил код, который регистрирует ВСЕ запросы:

const express = require('express') ;
const path    = require('path') ;
const app     = express() ;

const PORT = 3000 ;

var myLogger = function (req, res, next) {

  const { url, path: routePath }  = req ;
  console.log( 'my LOGGER - URL (' + url + '), PATH (' + routePath + ').' ) ;

  next() ;
}

app.use(myLogger) ;

app.use( express.static( path.join( __dirname, '/public') ) ) ;

app.listen(PORT, () => {
  console.log( 'app is running on port {'+PORT+'}.' ) ;
} ) ;

Еще короче:

const express = require('express') ;
const path    = require('path') ;
const app     = express() ;

const PORT = 3000 ;

app.use( function ( req, res, next ) {
  console.log( '### common TimeStamp:', Date.now() ) ;
  next() ;
} ) ; // timestamp all

app.use( express.static( path.join( __dirname, '/public') ) ) ;

app.listen(PORT, () => {
  console.log( 'app is running on port {'+PORT+'}.' ) ;
} ) ;

Ciao.

0 голосов
/ 08 апреля 2019

Вы можете создать собственное промежуточное ПО, которое проверяет, указывает ли запрос на какой-то статический актив, посмотрев на request.path.Например:

module.exports = (request, response, next) => {

    const {method, path} = request;
    if (method.toLowerCase() === 'get' && path.startsWith('/public'))
        console.log('static serving', path);

    next();
};

Помогает ли?

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