Почему я получаю ошибку 404 при попытке получить изображение с сервера узла?

#node.js #image #express

#node.js #изображение #экспресс

Вопрос:

У меня есть несколько изображений, сохраненных в папке сервера assets/img/products/

В файле server.js я делаю products папку общедоступной:

 app.use(express.static('./assets/img/products'));
  

но если я использую ссылку: http://localhost:3000/assets/img/products/111_#1.jpg
я получаю:

 {"status":404,"message":"Not found"}
  

здесь мои серверные папки:

 - server
  server.js
  - assets
    - img
      - products
        111_#1.jpg
  

какие-нибудь идеи??
Спасибо

Комментарии:

1. Вы просто не указываете полный путь в URL, это localhost:3000/filename.jpg .

2. @wiktor Zychla Я получаю ту же ошибку…

3. проблема, похоже, в # в имени изображения

4. Да, это так. Все, что после #, называется фрагментом uri и не передается на сервер.

5. @Wiktor Zychla если вы напишете полный ответ на этот вопрос, я могу пометить его как лучший ответ

Ответ №1:

В дополнение к комментарию @Wiktor Zychla.

Прямое копирование, вставленное с веб-сайта ExpressJS.

путь, который вы предоставляете функции express.static, относится к каталогу, из которого вы запускаете свой процесс узла. Если вы запускаете приложение express из другого каталога, безопаснее использовать абсолютный путь к каталогу, который вы хотите обслуживать:

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

Может быть, ваш путь неверен? Пожалуйста, проверьте это и не забудьте использовать path.join

Ответ №2:

отправьте имя изображения в параметрах и укажите путь к этому изображению в api, как показано ниже

  let image_name = req.params.image_name

 let directory_name =`path/to/image/where/is/image/stored/${image_name}`

  // read the image using fs and send the image content back in the response
        fs.readFile(directory_name, function (err, content) {
            if (err) {
                res.writeHead(400)
                console.log(err);
                res.end("No such image");
            } else {
                //specify the content type in the response will be an image
                res.writeHead(200);
                res.end(content);
            }
        });