Я не могу отобразить изображение, которое загружено и сохранено в базе данных - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь загрузить изображение, используя multer, mongoose и express. Загруженное изображение сохраняется в базе данных MongoDB, но я не могу отобразить его позже. Он говорит, что указанный файл не найден и выдает 404 error в console Вот мой app.js для него:

var express = require("express"), 
app = express(),
bodyParser = require("body-parser"),
mongoose = require("mongoose");
var multer = require('multer')

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads')
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + file.originalname);
  }
})  

var upload = multer({ storage: storage, 
    limit: {
        fileSize: 5000 * 5000 * 60
    },
    fileFilter: fileFilter
});

var fileFilter = (req, file, cb) => {
    if(file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
        cb(null, true);
    } else {
        cb(null, false);
    }
};

mongoose.connect("mongodb://localhost/restfulblog", {useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify: false});

app.set("view engine", "ejs");
app.use(express.static("public"));
app.use("uploads/", express.static("uploads"));
app.use(bodyParser.urlencoded({extended: true}));
app.use(sanitizer());
app.use(methodOverride("_method"));


var blogSchema = new mongoose.Schema({
    title:      String,
    image:      String,
    body:       String,
    createDate: {type: Date, default: Date.now}
});

var blog = mongoose.model("blog", blogSchema);

app.get("/", function(req, res) {
    res.redirect("/blogs");
})

// 1 INDEX ROUTE
app.get("/blogs", function(req, res) {
    blog.find({}, function(err, blogs) {
        if(err) {
            console.log(err);
        } else {
            res.render("index", {blogs: blogs});
        }
    });
});

// 2 NEW ROUTE
app.get("/blogs/new", function(req, res) {
    res.render("new");
});

// 3 CREATE ROUTE
app.post("/blogs", upload.single("image"), function(req, res) {
    console.log(req.file.path);
    var title = req.body.title;
    var image = req.file.path;
    console.log(image)
    var body = req.body.body;
    var newBlog = {title: title, image: image, body: body};
    blog.create(newBlog, function(err, newBlog) {
        if(err) {
            console.log(err.message);
            res.redirect("new");
        } else {
            res.redirect("back");
        }
    });
});

Вот мой e js file

<%- include("partials/header")%>
<div class="ui main text container">
    <div class="ui huge header">Naruto Blog App</div>
    <div class="ui top attached segment">
        <div class="ui divided items">
            <% blogs.forEach(function(blog) { %>
                <div class="item">
                    <div class="image">
                        <img src="<%= blog.image %>">   
                    </div>
                    <div class="content">
                        <a class="header" href="/blogs/<%= blog._id%>"><%= blog.title %></a>
                        <div class="meta">
                            <span><%= moment(blog.createDate).format('MMMM D, YYYY') %></span>
                        </div>
                        <div class="description">
                            <p><%= blog.body %>...</p>
                        </div>
                        <div class="extra">
                            <a class="ui floated orange button" href="/blogs/<%= blog._id%>">Read More <i class="hand point right outline icon"></i></a>    
                        </div>
                    </div>
                </div>
            <% }); %>
        </div>
    </div>
</div>

<%- include("partials/footer")%>

Пожалуйста, помогите мне решить проблему

1 Ответ

0 голосов
/ 27 марта 2020

Глядя на функцию Express stati c, похоже, что sla sh в аргументе root следует переместить в начало! Я переместил его и проверил ваш код на моей машине, и он заработал!

app.use('/uploads', express.static('uploads'));

Выборка localhost: 3000 / uploads / testimage.jpg вернула изображение!

Надеюсь, что помог

...