Попытка загрузить изображение с помощью monogdb требует nodejs, возникают проблемы

#javascript #node.js #express #ejs

Вопрос:

Я пытаюсь добавить изображение к остальному контенту в блоге.

Приведенный ниже код указывает, куда вы загружаете изображение. Однако после того, как я нажму «Сохранить», блог будет создан, но изображение не будет отображаться.

 <form method="POST" enctype="multipart/form-data">
    <div class="form-group">
        <label for="image">Add image</label>
        <input value="<%= article.image %>" type="file" name="image" id="image" class="form-control" />
    </div>
    <div class="form-group">
        <label for="title">School Name</label>
        <input required value="<%= article.title %>" type="text" name="title" id="title" class="form-control" />
    </div>
    <div class="form-group">
        <label for="about">About:</label>
        <textarea name="about" id="about" class="form-control">
  <%= article.about %></textarea>
    </div>
    <div class="form-group">
        <label for="description">Location:</label>
        <textarea name="description" id="description" class="form-control">
  <%= article.description %></textarea>
    </div>
    <div class="form-group">
        <label for="markdown">Admission:</label>
        <textarea required name="markdown" id="markdown" class="form-control">
  <%= article.markdown %></textarea>
    </div>

    <a href="/" class="btn btn-secondary">Cancel</a>
    <button type="submit" class="btn btn-primary">Save</button>
</form>
 

Я пытаюсь извлечь изображение из приведенного ниже кода. Я думаю, что именно в этом и заключается проблема. Это не понимание значения= article.image из приведенного выше кода, чтобы поместить изображение в папку загрузки/изображения.

 const express = require('express')
const Article = require('./../models/article')
const router = express.Router()
const multer = require('multer');

const storage = multer.diskStorage({
  //destination for files
  destination: function (req, file, callback) {
    callback(null, './uploads/images');
  },

  //add back the extension
  filename: function (req, file, callback) {
    callback(null, Date.now()   file.originalname);
  },
});

//upload parameters for multer
const upload = multer({
  storage: storage,
  limits: {
    fieldSize: 1024 * 1024 * 3,
  },
});

router.get('/new', (req, res) => {
  res.render('articles/new', { article: new Article() })
})

router.get('/edit/:id', async (req, res) => {
  const article = await Article.findById(req.params.id)
  res.render('articles/edit', { article: article })
})

router.get('/:slug', async (req, res) => {
  const article = await Article.findOne({ slug: req.params.slug })
  if (article == null) res.redirect('/')
  res.render('articles/show', { article: article })
})

router.post('/', async (req, res, next) => {
  req.article = new Article()
  next()
}, saveArticleAndRedirect('new'))

router.put('/:id', async (req, res, next) => {
  req.article = await Article.findById(req.params.id)
  next()
}, saveArticleAndRedirect('edit'))

router.delete('/:id', async (req, res) => {
  await Article.findByIdAndDelete(req.params.id)
  res.redirect('/')
})


router.post('/', upload.single('image'), async (req, res) => {
  console.log(request.file);
  let article = new Article({
    image: req.file.filename,
  });

  try {
    article = await article.save();

    res.redirect(`articles/${article.slug}`);
  } catch (error) {
    console.log(error);
  }
});



function saveArticleAndRedirect(path) {
  return async (req, res) => {
    let article = req.article
    article.title = req.body.title
    article.about = req.body.about
    article.description = req.body.description
    article.markdown = req.body.markdown
    /* article.image = req.body.filename */
    try {
      article = await article.save()
      res.redirect('/')
      /* res.redirect(`/articles/${article.slug}`) */
    } catch (e) {
      res.render(`articles/${path}`, { article: article })
    }
  }
}

module.exports = router
 

Если бы кто-нибудь мог помочь, я был бы очень признателен

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

1. Я не вижу в вашем коде ничего, что могло бы обслуживать изображение на стороне сервера. Простое указание имени article.image файла не означает, что изображение действительно будет ЗАГРУЖЕНО.