Как отобразить изображение из файла json в nodejs

#node.js #reactjs #express

Вопрос:

У меня есть простой проект, reactJs ,nodeJs,expressJs и в настоящее время я храню все свои данные в JSON file . Я использую multer npm Package для хранения изображения. Я храню файл таким образом в NodeJS. Код NodeJS загружает файл, но проблема в том, что я не могу отобразить это во внешнем интерфейсе

 var multer = require("multer");

var data = require("./data.json");
var userRouter = require("./routes/userRoutes");
const FILe_EXTENSION = {
  "image/png": "png",
  "image/jpeg": "jpeg",
  "image/jpg": "jpg",
};
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    console.log("mimetype", file.mimetype);
    const isValid = FILe_EXTENSION[file.mimetype];
    let uploadError = new Error("File Extension Not Supported");
    if (isValid) {
      uploadError = null;
    }
    cb(uploadError, "uploads");
  },
  filename: function (req, file, cb) {
    console.log("filename", file);
    const fileName = file.originalname.split(".")[0]; //replcing spaces with underscore
    const extension = FILe_EXTENSION[file.mimetype];
    console.log("filo", fileName);
    cb(null, `${fileName}-${Date.now()}.${extension}`);
  },
});

const upload = multer({ storage: storage });
var type = upload.single("avatar");
app.post("/upload", type, (req, res) => {
  const basePath = `${req.protocol}://${req.get("host")}/uploads/`;
  let imag = `${basePath}${req.file.filename}`;
  let obj = {
    id: Math.round(Math.random() * 100),
    title: req.body.title,
    description: req.body.description,
    created_at:  new Date(),
    image: imag,
  };
  data.push(obj);
  console.log("path", imag);
  res.status(200).send({ message: "stored" });
});
 

Полный путь к файлу выглядит следующим образом http://localhost:9000/uploads/background-1632727441391.jpeg

 Now how can I display this file in the frontend? I tried the below code but it's not showing the image
 

//display.js

  const displayPosts = () =>
        posts.map((post, index) => (
          <div className="container" key={index}>
            <div className="row">
              <div className="col-md-8 offset-md-2">
                <div className="card mb-3" style={{ maxWidth: "540px" }}>
                  <div className="row g-0">
                    <div className="col-md-4">
                      <img
                        src={post.image}
                        className="img-fluid rounded-start"
                        alt="..."
                      />
                    </div>
                    <div className="col-md-8">
                      <div className="card-body">
                        <h5 className="card-title"> {post.title}</h5>
                        <p className="card-text">{post.description}</p>
                        <p className="card-text">
                          <small className="text-muted">
                            {moment(post.created_at).fromNow()}
                          </small>
                        </p>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        ));
 

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

1. react-это клиентская сторона, express-это серверная часть, я бы не рекомендовал расчесывать их в одном проекте

2. Вы проверили http://localhost:9000/uploads/background-1632727441391.jpeg этот путь в своем браузере, чтобы узнать, правильный ли он или нет?

3. Смит Гаджера :Да, я проверяю это, но это показывает CANNOT GET

4. Я не могу подтвердить это прямо сейчас, но я считаю, что вам нужно сделать свой каталог, содержащий изображения, доступными для выражения. См. документы expressjs.com/en/starter/static-files.html