Получение изображения от localhost дает 404 с NodeJS и Express - PullRequest
0 голосов
/ 22 января 2020

Я реализовал загрузку изображений в NodeJS express, используя multer, и при попытке получить изображения в браузере я получил эту ошибку:

URL: http://localhost:5500/images/posts/5e2843e4efa65f188fc5552f.png
Cannot GET /images/posts/5e2843e4efa65f188fc5552f.png

Я увидел в консоли 404 поэтому я не могу понять, почему я не вижу свое изображение.

Я сделал загрузку следующим образом:

postRouter.post(
    "/:id/uploadImg",
    multerConfig.single("image"),
    async (req, res) => {
        try {
            const fileName =
                req.params.id + path.extname(req.file.originalname);

            const newImageLocation = path.join(
                __dirname,
                "../../images/posts",
                fileName
            );

            await fs.writeFile(newImageLocation, req.file.buffer);

            req.body.image =
                req.protocol +
                "://" +
                req.get("host") +
                "/images/posts/" +
                fileName;

            const newPostImg = await Posts.findOneAndUpdate(
                { _id: req.params.id },
                {
                    $set: { image: req.body.image }
                }
            );

            newPostImg.save();

            res.send("Image URL updated");
        } catch (ex) {
            res.status(500).send({ Message: "Internal server error", err: ex });
        }
    }
);

И на моем сервере. js

server.use(express.static("./images"));

Я могу загрузить, но не могу увидеть его и не могу понять, в чем проблема.

1 Ответ

1 голос
/ 22 января 2020

Когда вы писали server.use(express.static("./images"));, вы указали серверу искать каталоги и файлы , начиная с из папки ìmages в вашем приложении.

Поэтому вам следует go to http://localhost:5500/posts/5e2843e4efa65f188fc5552f.png для поиска вашего загруженного файла. Предполагая, что до server.use(express.static("./images"));.

РЕДАКТИРОВАТЬ:

другого подходящего маршрута нет. Если вы хотите использовать путь, который уже используете, вам следует изменить свой Директория images выглядит следующим образом:

--images
  --images
    --posts
      -photo.png

И измените путь, по которому ваш код Multer сохраняет файл, следующим образом:

const newImageLocation = path.join(
                __dirname,
                "../../images/images/posts",
                fileName
            );
...