簡體   English   中英

Express Route Handler無法觸發文件類型路徑

[英]Express Route Handler not firing for file type path

我正在嘗試創建一個路由處理程序來處理對'.js'文件的請求。 我已經有了一個中間件設置,可以從“ / dist”目錄提供靜態文件(請參見代碼示例的第一行)。 這可以正常工作。

但是由於某種原因,當我嘗試請求在“ / dist”文件夾中預編譯的“ js”文件時,用於處理對“ .js”文件的請求的路由處理程序永遠不會觸發。 它僅針對不存在的“ js”文件觸發。

閱讀快速文檔后,我仍然無法挑選出我做錯的事情。 我該如何工作?

// Serve files from static path
app.use(express.static(path.join(__dirname, 'dist')));

// This gets hit when app requests nonexisting "js" file
// How to make it work for actual "js" files?
app.use('*.js', () => {
  console.log('Hit. js file found');
});

// This gets hit per every request as expected
app.use('*', (req, res, next)=> {
  console.log(1, 'any request');
  next();
});

// Route handler for all other files
// This doesn't get hit for js files that exist in the "dist" folder. Strangely, it gets hit "js" files that don't exist
app.get('*(?<!.js)$', (req, res) => {
  const baseRoute = req.params['0'];
  const fileName = routeConfig[baseRoute];

  console.log('regular route');

  if (IS_PROD_ENV) {
    res.sendFile(path.join(BUILD_PATH, fileName));
  } else {
    sendFileFromMemory(res, fileName)
  }
});

您已經為dist目錄設置了靜態路由,因此該目錄中存在的所有文件將被靜態提供。 這是在您的任何路由都被匹配之前發生的,因此,當dist中不存在文件時,它將與您的*.js路由匹配。

如果要嘗試首先匹配您的路線,請在*.js路線后移動靜態聲明行:

// This route will be matches first 
app.use('*.js', () => {
  console.log('Hit. js file found');
});

// Then this one
app.get('*(?<!.js)$', (req, res) => {
  const baseRoute = req.params['0'];
  const fileName = routeConfig[baseRoute];

  console.log('regular route');

  if (IS_PROD_ENV) {
    res.sendFile(path.join(BUILD_PATH, fileName));
  } else {
    sendFileFromMemory(res, fileName)
  }
});

// Then static files in dist dir
app.use(express.static(path.join(__dirname, 'dist')));

// Then everything else
app.use('*', (req, res, next)=> {
  console.log(1, 'any request');
  next();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM