#javascript #node.js #mongoose #ejs #multer
Вопрос:
У меня есть простое приложение, которое получает заголовок, описание и изображение от пользователя multer
, обрабатывающего часть загрузки изображений, и я получаю изображения в статической папке под названием public и в ее подпапке. Затем он заносится в базу данных. Я нахожу его в базе данных и пытаюсь визуализировать изображение, но изображение не визуализируется. Хотя он присутствует в папке «Загрузки», но он не отображается. Вот Мой код.
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const mongoose = require("mongoose");
const multer = require("multer");
const fs = require("fs");
const path = require("path");
//APP use
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname "./public/"));
//Multer Setup
const storage = multer.diskStorage({
destination: "./public/uploads/",
filename: (req, file, cb) => {
cb(null, file.fieldname '_' Date.now() path.extname(file.originalname));
}
});
const upload = multer({ storage: storage }).single("img");
//Mongoose Setup
mongoose.connect('mongodb://localhost:27017/project-1', {useNewUrlParser: true, useUnifiedTopology: true}).then(console.log("Successfully connected to the server"));
//Routes
app.get("/", (req, res)=>{
BlogModel.find({}, function(err, foundItem){
if(err){
console.log(err);
}else{
console.log(foundItem);
res.render("home", {foundItem : foundItem});
}
})
});
app.get("/creat", (req, res)=>{
res.render("creat");
});
app.post("/creat", upload ,(req, res)=>{
const data = new BlogModel({
heading: req.body.name,
desc: req.body.desc,
img: req.file.filename
});
data.save((err)=>{
if(!err){
res.redirect("/");
}else{
console.log(err);
}
});
console.log("Successfully Submited The Form");
});
//Database Schema
const Blogschema = new mongoose.Schema({
heading: String,
desc: String,
img: String
});
//Database Model
const BlogModel = new mongoose.model("Image", Blogschema);
//Listen On Port 3000
app.listen(3000, ()=>{
console.log("Listening on port 3000");
});
<%- include('partials/header'); -%>
<% foundItem.forEach(function(item){ %>
<h1><%= item.heading %></h1>
<p><%=item.desc%></p>
<img src="./uploads/<%=item.img%>" alt="image">
<%})%>
<%- include('partials/footer'); -%>
Вот ошибка.
Здесь она хранится в общей папке внутри загрузок
Извините, если код слишком длинный.
Комментарии:
1. Вы пробовали <img src=»/загрузки/<%=item.img%>» alt=»изображение»<%=item.img%>> (начиная путь с ‘/’)
2. да, я пытался, но это не сработало. Есть какое-нибудь другое решение?
Ответ №1:
Попробуйте добавить «общедоступный» для имени статической папки
app.use(express.static("public"));
Или, если вы хотите использовать __dirname,
app.use(express.static(path.join(__dirname, 'public')))
Комментарии:
1. Спасибо, я просто хочу спросить, как я создал статическую общую папку, было неправильно???
2. Нет, в своем коде вы добавили «./public/» для имени папки. Это неверно. Потому что, когда вы соедините его с __dirname, он вернется как «Некоторый файл/./public/»