我无法使express.static()对我有用

时间:2019-03-26 12:18:15

标签: node.js express

尽管我对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'));

但似乎没有任何作用。

3 个答案:

答案 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指引了我正确的方向。如果您听不懂这种简单的语言,并且对问题感到困惑,以至于您开始投票,那么我对此无能为力,只能对您感到抱歉:)。