尽管我对node或express并不陌生(这使它更加令人沮丧),但是这次我无法为我做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>
我无法在html页面中加载img1.jpg。我也不能导航到index2.html。 如果将img文件夹和index2.html放在顶层以及stk文件夹中,就足够奇怪了,只有这样我才能将img1.jpg加载到index.html中并导航到index2.html。这意味着我必须将这些文件放在两个位置(顶层和stk文件夹中)。 我尝试过
app.use(express.static('stk'));
还有这个
app.use(express.static(__dirname +'/stk'));
但似乎没有任何作用。
答案 0 :(得分:0)
您正在为stk创建两个不同的路由。您只能创建一个。
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>
答案 1 :(得分:0)
请按以下方式使用它,应该可以解决您的问题。在此之前说 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>
答案 2 :(得分:0)
最后,我能够解决问题。 @hurricane指导了我正确的方向,确实这是路由问题,但仅在nginx设置中。我在同一台服务器上有多个网站,并且问题出在“ server_name”指令上。对其进行更正后,现在一切都按预期工作。 @Tejas Bramhecha我发布了尽可能简单的代码,我说“它对我不起作用”。那意味着我知道这是非常基本的代码,但是我想要一些指导,这可能是其他问题。幸运的是,@ hurricane指引了我正确的方向。如果您听不懂这种简单的语言,并且对问题感到困惑,以至于您开始投票,那么我对此无能为力,只能对您感到抱歉:)。