Служба статических файлов в экспрессе не работает на разных маршрутах, только в корневом маршруте

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

Я использую page.js и экспресс для разработки моего маленького приложения. Когда я работаю со своими статическими файлами, все отлично работает в моем пути "/" (root). Но когда я перехожу на другой маршрут, например, "/client-profile/:user_id", мои статические файлы не отображаются, потому что мой шаблон показывает мне только неработающие ссылки, а иногда ничего не показывает.

Когда я использую инструмент "проверить элемент" в своем браузере над одним изображением на маршруте "/", он показывает мне, например, "/image.jpg", но когда я иду на другой маршрут ("/client-profile/:user_id") с тем же изображением, он показывает мне "/client-profile/image.jpg"

Вот мой код:

server.js (экспресс)

var express = require('express')
var path = require('path')

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

lisaPosApp.get('/client-profile/:user_id', function (req, res) {
  res.render('index', { title : '.: LISA | Usuarios | Loyalty Improvement Service Application :.' })
})

index.js (pagejs)

var page = require('page')
var templateClientProfile = require('./template')
var request = require('superagent')
var header = require('../header-n-left-menu')
var utils = require('../utils')

page('/client-profile/:user_id', utils.loadUserAuth, header, loadClientInfo, function (ctx, next) {
    $('title').html(`.: LISA | ${ctx.user.username} | Loyalty Improvement Service Application :.`)
  var mainContainer = document.getElementById('main-container')

  mainContainer.innerHTML = ''
  mainContainer.appendChild(templateClientProfile(ctx.user))
  document.getElementById('section-preloader').remove()

  $('select').material_select()
  $('ul.tabs').tabs()
})

function loadClientInfo (ctx, next) {
  request
    .get(`/api/client-profile/${ctx.params.user_id}`)
    .end(function (err, res) {
      if (err) return console.log(err)

      ctx.user = res.body
      next()
    })
}

(Примечание: все мои статические файлы, не важно, какого типа, находятся в папке с именем public в корневой папке проекта)

Заранее спасибо большое!

1 ответ

Решение

Когда вы используете express.static('/public') Вы должны поместить все свои статические ресурсы в общую папку и указать относительный путь на своей html-странице примерно так: для файла index.js, который находится в публичном каталоге, напишите

<script src="/index.js"></script>
Другие вопросы по тегам