簡體   English   中英

`express.static()`繼續路由我的文件

[英]`express.static()` keeps routing my files from the route

在處理快速項目時,我正在嘗試使用express.Router對象來處理我的應用程序路由。 在我的主應用程序文件中,我為所有靜態文件(css,javascript,html)添加了靜態路由。

app.js

var express = require('express');
var io = require('socket.io')(app);
var bodyParser = require('body-parser');
var router = require('./include/router');

var app = express();
app.use('/', router);
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json());

io.on('connection', function(socket) {

});

app.listen(3000);

router.js

var express = require('express');
var path = require('path');

var router = express.Router();

router.get('/', function(req, res) {
  res.sendFile('/html/index.html');
});

module.exports = router;

當我嘗試訪問localhost:3000我得到404顯示Error: ENOENT, stat 'C:\\html\\index.html'

此外,當我嘗試直接訪問靜態路由時( http://localhost:300/html/index.html我相信),但這讓我Cannot GET /html/index.html

這是我的公用文件夾的樹

public
├───css
├───hmtl
|   └───index.html
├───img
└───js

我錯了嗎? 我該如何解決?

您必須反轉路由器的順序

app.use('/', router);
app.use(express.static(__dirname + '/public'));

意味着您的路由器將首先被調用,如果沒有中間件處理請求,則express將調用靜態文件,因此,如果您先將靜態中間件放入,則express將首先處理靜態文件。

還建議先放置靜態中間件。

對於你的問題,你應該試試這個:

app.use(express.static(__dirname + '/public/html'));
app.use(express.static(__dirname + '/public'));
app.use('/', router);

Express將首先在public / html文件夾上嘗試靜態文件,然后在其余部分(包括public / html)上,我更喜歡將html文件放在公用文件夾的根目錄上,或者可能放在不同的文件夾上(例如public-html,static-html) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM