Служить статической директории с динамическими параметрами запроса URL - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь обслуживать статический каталог динамически, добавляя параметр пути к URL.

Я могу нормально обслуживать каталог с помощью следующей строки, которая отображает html и подкаталоги в браузере без необходимости чтения файла и т. Д .:

app.use('/', express.static('/Users/virtuload-beta/backend/uploads/folder/subfolder/'))

Это помогло для тестирования, но яМне нужно, чтобы он был динамическим, поскольку я получаю имя каталога в зависимости от переменной пути из MongoDB, а затем обслуживаю каталог на основе URL.

Я пробовал несколько решений, это мое текущее:

  • app.js:
app.use('/static', express.static(path.join(__dirname, '../uploads', )), serveRouter)
  • rout.js:
router.get('/:id', FileCtrl.servepath);

-FileCtrl.js:

const servepath = async (req, res) => {
  try {
    let id = req.params.id 
    Upload.findById(id)
          .populate('Upload')
          .select('relPath') //relPath = /folder/subfolder
          .exec(function(err, upload) {
            if (err) {
              res.send(err)
            } else {
              const filepath = `${upload.relPath}`        
              console.log(filepath)    //logs folder/subfolder 
            //parse http object coming from client
              const urlObject = url.parse(req.url, true)
              console.log(urlObject)

              var myUrl = new URL(`http://localhost:8000/static/${filepath}`)
              return myUrl;
            }
          })
      } catch (e) {
        console.error(e)
      }
}

Я не получаю никакой ошибки, но она не работает.

1 Ответ

1 голос
/ 19 сентября 2019

Управление req.url и возврат next()

Первый маршрут

router.get('/:id', FileCtrl.servepath);

Контроллер (добавлено next):

const servepath = async (req, res, next) => {
  try {
    let id = req.params.id
    Upload.findById(id)
      .populate('Upload')
      .select('relPath') //relPath = /folder/subfolder
      .exec(function (err, upload) {
        if (err) {
          res.send(err)
        } else {
          const filepath = `${upload.relPath}`
          req.url = `/static/${pathfile}/index.html`
          return next();
        }
      })
  } catch (e) {
    console.error(e)
  }
}

Последний вашстатический маршрут (примечание: определите его после всех других маршрутов)

app.use('/static', express.static(path.join(__dirname, '../uploads')), serveRouter)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...