Я не могу заставить Express.static () работать на меня - PullRequest
0 голосов
/ 26 марта 2019

Хотя я не новичок в узле или экспрессе (что делает его более расстраивающим), но на этот раз я не могу заставить работать express.static для меня. Ниже приведена моя структура каталогов.

├── node_modules
│   ├── accepts
│   │   ├── HISTORY.md
│   │   ├── LICENSE
.
.
.
.
├── favicon.ico
├── package-lock.json
├── package.json
├── mynode.js
└── stk
    ├── img
    │   ├── img1.jpg
    │   └── img2.jpg
    ├── index.html
    └── index2.html

Это мой js файл

const express = require('express');
const app = express();
const http = require("http");
const https = require("https");
const fs = require("fs");
var privateKey = fs.readFileSync("/etc/letsencrypt/live/xxxxxxxxx/privkey.pem","utf8");
  var certificate = fs.readFileSync("/etc/letsencrypt/live/xxxxxxxxx/fullchain.pem","utf8");
  var credentials = { key: privateKey, cert: certificate };
  var server = https.createServer(credentials, app);


app.use(express.static('stk'));
server.listen(8080);

app.get("/", function (req, res) {
    res.sendFile(__dirname + "/stk/index.html");
}); 

И это в моей разметке index.html

 <div style="width:200px; height:200px; overflow: hidden;">
    <img src="img/img1.jpg" alt="image1">
     </div>   
     <a href="index2.html">index2</a>

Я не могу загрузить img1.jpg на мою HTML-страницу. Я также не могу перейти к index2.html. Как ни странно, если я положу img folder и index2.html на верхний уровень, а также в папку stk, только тогда я могу загрузить img1.jpg в мой index.html и перейти к index2.html. Это означает, что я должен поместить эти файлы в два места (верхний уровень, а также в папку stk). Я пытался

app.use(express.static('stk'));

и это

app.use(express.static(__dirname +'/stk'));

но, похоже, ничего не работает.

Ответы [ 3 ]

0 голосов
/ 26 марта 2019

Пожалуйста, используйте его следующим образом, должны решить вашу проблему. Перед этим скажите npm install ejs --save

var path = require('path');

//set up view engine 
app.set('views', path.join(__dirname, 'stk'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

app.use(express.static(path.join(__dirname, 'stk')));

app.get('/index', function(req, res){
    res.render('index.html');
});

& в index.html, используйте его следующим образом:

<div style="width:200px; height:200px; overflow: hidden;">
   <img src="/img/img1.jpg" alt="image1">
</div>
0 голосов
/ 27 марта 2019

Наконец я смог решить проблему.@hurricane направил меня в правильном направлении, действительно, это была проблема маршрутизации, но только в настройках nginx.У меня есть более одного веб-сайта на одном сервере, и проблема была с директивой server_name.После исправления все теперь работает как положено.@Tejas Bramhecha Я опубликовал самый простой код и сказал: «Это не работает для меня».Это означает, что я знаю, что это очень простой код, но мне нужно было руководство, в чем еще может быть проблема.К счастью @hurricane направил меня в правильном направлении.Если вы не можете понять этот простой язык и настолько запутались в вопросе, что начали голосовать, я ничего не могу с этим поделать, кроме как чувствовать и извиняться перед вами :).

0 голосов
/ 26 марта 2019

Вы создаете два разных маршрута для стк. Вы можете создать только один.

const express = require('express');
const app = express();
const http = require("http");
const https = require("https");
const fs = require("fs");
const privateKey = fs.readFileSync("/etc/letsencrypt/live/xxxxxxxxx/privkey.pem","utf8");
  var certificate = fs.readFileSync("/etc/letsencrypt/live/xxxxxxxxx/fullchain.pem","utf8");
const credentials = { key: privateKey, cert: certificate };
  var server = https.createServer(credentials, app);


app.use(express.static('stk'));

// now you should be able to call;
// localhost:8080/img/img1.png
// localhost:8080/img/img2.png
// localhost:8080/index.html

server.listen(8080);

В вашем html хорошо назвать ваши активы с /

<img src="/img/img1.jpg" alt="image1">
<a href="/index2.html">index2</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...