无法将图像呈现为 HTML 页面

问题描述 投票:0回答:1

我使用 Node.js Express Js 创建了一个 Curd Web 应用程序。我能够从数据库中检索除图像文件之外的所有详细信息。

Server.js

const express = require('express');
const path =require('path');
const morgan = require('morgan');
const dotenv = require('dotenv');
const connectDB = require('./server/database/connection');
const serProvModel = require('./server/model/serviceProvider')
const bcrypt =require('bcryptjs');
const { response } = require('express');
const jwt = require('jsonwebtoken')
const session = require('express-session')

const app = express();

// app.use(bodyParser.json());
app.use(express.json());
app.use(express.urlencoded({ extended: true}));
app.disable('etag');

app.use(
    session({
        secret: "My Secret Key",
        saveUninitialized: true,
        resave: false,
    })
);

app.use((req, res, next)=> {
    res.locals.message = req.session.message;
    delete req.session.message;
    next();
})

// Assigning a PORT
dotenv.config({path:'config.env'});

const JWT_SECRET= process.env.JWT_SECRET;

const PORT=process.env.PORT || 3000;

// Morgan Module--log request
app.use(morgan('dev')); 


// Database coonection
connectDB();

// app.use(express.static("uploads"));

app.set('view engine', 'ejs');

// load assets
app.use('/css', express.static(path.resolve(__dirname, "assets/css")));
app.use('/img', express.static(path.resolve(__dirname, "assets/img")));
app.use('/js', express.static(path.resolve(__dirname, "assets/js")));
app.use('/', express.static(path.join(__dirname, 'views')));

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

app.listen(PORT, ()=> {console.log('Server is running on', PORT)})

route.js

const express = require('express');
const route = express.Router();
const services = require('../services/render');
const AuthController = require('../controller/authController');
const Accomodation = require('../model/accomodation');
const multer = require('multer');
const mongooseValidationErrorHandler = require('mongoose-validation-error-message-handler');
const accomodation = require('../model/accomodation');
const { off } = require('../model/serviceProvider');


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

var upload = multer({
    storage: storage,
}).single('image');


// Accommodation inserting 
route.post('/add-accomodation', upload, (req, res) =>{
    const accomodation = new Accomodation({
    serviceProvider:req.body.serviceProvider,
    title: req.body.title,
    description: req.body.description,
    otherdesc: req.body.otherdesc,
    location: req.body.location,
    image: req.file.filename,
    price: req.body.price,
    category: req.body.category,
    phone: req.body.phone,
    availabilty: req.body.availabilty,

    });

    accomodation.save(accomodation)
    .then(data=> {
        
        req.session.message= {
            type: 'Success',
            message: 'Service created successfully'
        }; res.redirect('/dashboard/accomodation');
        // console.log(message);
    })
    .catch(err =>{
        const error = mongooseValidationErrorHandler(err);
        console.log(error);
        res.status(500).send({
            message:err.message || "Error in creating"
        })
    })
    // accomodation.save((err) =>{
    //     if(err){
    //         res.json({message:err.message, type:'dange'});
    //     }else{
    //         req.session.message= {
    //             type: 'Success',
    //             message: 'Service created successfully'
    //         };
    //         res.redirect('/dashboard/accomodation')
        
    //     }
    // })
})

/**
 * @description Root route
 * @method GET
 */
route.get('/dashboard/accomodation', (req, res)=>{

    if(req.query.id){
        const id = req.query.id;
        Accomodation.findById(id).then(data=>
            {
                if(!data){
                    res.status(404).send({message: "Service not Found"})
                }else{
                    res.send(data)
                }
            })
            .catch(err =>{
                res.status(500).send({message: "Error retrieving service by ID"})
            })
    }else{
        Accomodation.find().then(accomodation=>{
            res.render('accomodation', {title: 'Accomodations- Leisure Diary', accomodation: accomodation});
            
        })
        .catch(err=>{
            res.status(500).send({message:err.message || "Error on getting all the data"});
        })
    }

创建表单页面:

<%- include('include/_header') %>

<div class="container form-container">
    <div class="row">
        <div class="col-md-5 mx-auto mt-3">
            <div class="card shadow">
                <div class="card-header bg-primary">
                    <h3 class="text-light">
                        Add new Service
                    </h3>
                </div>
                <div class="card-body  p-2">
                    <!-- route name -->
                    <form action="/add-accomodation" method="post" id="add-form" enctype="multipart/form-data">

                        <div class="mb-2">
                            <label for="title">Title</label>
                            <input type="text" name='title' class="form-control form-control-sm" placeholder="Enter Title" required/>
                        </div>
                        <div class="mb-2">
                            <label for="description">Description</label>
                            <input type="text" name='description' class="form-control form-control-sm" placeholder="Enter Main Description" required/>
                        </div>
                        <div class="mb-2">
                            <label for="otherdesc">Other Description</label>
                            <input type="text" name='otherdesc' class="form-control form-control-sm" placeholder="Enter Other Description" required/>
                        </div>
                        <div class="mb-2">
                            <label for="location">Location</label>
                            <input type="text" name='location' class="form-control form-control-sm" placeholder="Select Locaiton" required/>
                        </div>
                        <div class="mb-2">
                            <label for="price">Price</label>
                            <input type="text" name='price' class="form-control form-control-sm" placeholder="Enter Rate" required/>
                        </div>
                        <div class="mb-2">
                            <label for="availability">Availability</label>
                            <input type="text" name='availability' class="form-control form-control-sm" placeholder="Select date" required/>
                        </div>
                        <div class="mb-2">
                            <label for="serviceProvider">Service Provider</label>
                            <input type="text" name='serviceProvider' class="form-control form-control-sm" placeholder="Service Provider" required/>
                        </div>
                        <div class="mb-2">
                            <label for="category">Category</label>
                            <input type="text" name='category' class="form-control form-control-sm" placeholder="Category" required/>
                        </div>
                        <div class="mb-2">
                            <label for="phone">Phone</label>
                            <input type="text" name='phone' class="form-control form-control-sm" placeholder="Phone" required/>
                        </div>
                        <div class="mb-2">
                            <label for="image" class="form-lable">Select Image</label>
                            <input type="file" name='image' id="image" class="form-control form-control-sm" required/>
                        </div>
                        <div class="mb-3 d-grid">
                            <input type="Submit" name="submit" value="Create Service" class="btn btn-primary btn-md">
                        </div>

                    </form>
                </div>
            </div>
            
        </div>
    </div>
</div>

<%- include('include/_footer') %> 

HTML 页面 - 表格(使用 EJS):

<tbody>
    <% accomodation.forEach((row, index) => { %>
        <tr>
            <td><%= index %></td>
            <td><img src="<%= row.image %>" width="50" class="img-thumbnail" alt="Image Loading..."> </td>
            <td><%= row.title %></td>
            <td><%= row.description %></td>
            <td><%= row.otherdesc %></td>
            <td><%= row.phone %></td>
            <td><%= row.location %></td>
            <td><%= row.price %></td>
            <td><%= row.availability %></td>
            <td><%= row.serviceProvider %></td>
            <td><a href="/edit-accomodation/<%= row.id %>" class="text-success"><i class="fas fa-edit fa-lg mx-1 "></i></a>
                                    <a href="/delete-accomodation/<%= row.id %>"  class=""><i class="fa-sharp fa-solid fa-trash " style="color:red"></i></a>
            </td>
        </tr>
        <% }) %>
    </tbody>
</table>
<% } else {%>
    <h2 class="text-center text-secondary mt-3"> No services found</h2>
<% } %>

我检查了控制台,它显示了这些输出:

有人能指出我这段代码中的错误吗?

javascript node.js ejs
1个回答
0
投票

应替换为

© www.soinside.com 2019 - 2024. All rights reserved.