#javascript #node.js #express #handlebars.js
Вопрос:
Я пытаюсь создать простое веб-приложение с NodeJS и экспресс-рулями . Но изображения неправильно отображаются на моей html-странице, которую я визуализирую с помощью руля.
Ниже приведена структура моего приложения
Мое приложение-это корневая папка
-images
-views
-layouts
-main.hbs
-home.hbs
-index.js
-package.json
Мой index.js содержит приведенный ниже код
const express = require('express');
const exphbs = require('express-handlebars');
const app = express();
//Setting default layout and extension name
app.engine('hbs', exphbs({
defaultLayout: 'main',
extname: '.hbs'
}));
//providing path for images
app.use(express.static("images"));
//Setting view engine
app.set('view engine', 'hbs');
//get method for landing page
app.get('/' , (req , res)=>{
res.render('landing')
})
//get method for home page
app.get('/home',(req,res) =>{
res.render('home');
})
//Staring server
app.listen(8080,() =>{
console.log("Server started successfully on port 8080");
});
И home.hbs содержит, как показано ниже
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<img src="/home/vishu/Desktop/WebTest/ECom/images/apple.jpg" alt="Apple product set">
</body>
</html>
Что я должен сделать, чтобы устранить вышеуказанную проблему
Комментарии:
1. Ваше изображение
src
-это не путь на жестком диске вашего сервера, это URL-адрес (браузер не может видеть HD сервера по очевидным причинам, он должен запросить изображение через HTTP, как и HTML-документ). Вы установили каталог изображений в качестве корневого для статических файлов, так и должно быть<img src="/apple.jpg">
(обратите внимание, что вы, вероятно, хотите создатьpublic
вместо этого папку, переместите туда папку изображений и используйтеsrc="/images/apple.jpg"
ее, чтобы также можно было ссылаться на статические CSS-и JS-файлы)
Ответ №1:
let options = {
dotfiles: "ignore", //allow, deny, ignore
etag: true,
extensions: ["htm", "html"],
index: false, //to disable directory indexing
maxAge: "7d",
redirect: false,
setHeaders: function (res: any, path: any, stat: any) {
//add this header to all static responses
res.set("x-timestamp", Date.now());
}
};
//process.cwd will fetch from the current working directory and serve images over the server
app.use(express.static(`${process.cwd()}/images`, options));
//it will set the html path that would get served from /views
app.set('views', express.static(process.cwd() '/views'));
//it will set the engine
app.set('view engine', 'hbs');
Для URL-адреса изображения укажите путь с помощью размещенных изображений на сервере.
//BASE URL
`${BASE.URL}/images/Pamlogo.png`
Give it a try, All the best (yes)