[node.js] express.js가있는 정적 파일

정적 파일로 서브 디렉토리 를 제공 index.html하고 싶습니다 /media. 색인 파일은 URL /index.html/URL 모두에 제공되어야 합니다.

나는 가지고있다

web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));

그러나 두 번째 줄은 분명히 __dirname원하지 않는 파일 ( index.html및 뿐만 아니라 media)의 모든 파일을 포함 하여 전체를 제공합니다 .

나는 또한 시도했다

web_server.use("/", express.static(__dirname + '/index.html'));

그러나 기본 URL에 액세스하면 (더블 구성 요소) /에 대한 요청이 발생하지만 실패합니다.web_server/index.html/index.htmlindex.html

어떤 아이디어?


그건 그렇고, 나는이 주제 ( static()+ 그 매개 변수)에 대한 Express의 문서를 전혀 찾을 수 없었습니다 . 문서 링크도 환영합니다.



답변

express.static()첫 번째 매개 변수 는 파일 이름이 아닌 디렉토리 의 경로 일 것으로 예상합니다 . 나는 당신을 포함 index.html하고 그것을 사용 하기 위해 다른 하위 디렉토리를 만드는 것이 좋습니다 .

Express에서 정적 파일 제공 문서 , 또는 자세한 serve-static문서 포함, 봉사 기본 동작index.html :

기본적으로이 모듈은 디렉토리의 요청에 대한 응답으로 “index.html”파일을 보냅니다. 이 설정을 false로 설정하거나 새 색인을 제공하려면 원하는 순서로 문자열 또는 배열을 전달하십시오.


답변

이 설정이 있으면

/app
   /public/index.html
   /media

그런 다음 원하는 것을 얻을 수 있습니다.

var express = require('express');
//var server = express.createServer();
// express.createServer()  is deprecated. 
var server = express(); // better instead
server.configure(function(){
  server.use('/media', express.static(__dirname + '/media'));
  server.use(express.static(__dirname + '/public'));
});

server.listen(3000);

트릭은이 줄을 마지막 폴백으로 남겨두고 있습니다.

  server.use(express.static(__dirname + '/public'));

문서에 관해서는 Express가 connect 미들웨어를 사용하기 때문에 연결 소스 코드를 직접 보는 것이 더 쉽다는 것을 알았습니다.

예를 들어이 줄은 index.html이 https://github.com/senchalabs/connect/blob/2.3.3/lib/middleware/static.js#L140을 지원함을 보여줍니다


답변

최신 버전의 express에서는 “createServer”가 더 이상 사용되지 않습니다. 이 예제는 저에게 효과적입니다.

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

//app.use(express.static(__dirname)); // Current directory is root
app.use(express.static(path.join(__dirname, 'public'))); //  "public" off of current is root

app.listen(80);
console.log('Listening on port 80');


답변

res.sendFile& express.static둘 다 이것을 위해 일할 것입니다

var express = require('express');
var app = express();
var path = require('path');
var public = path.join(__dirname, 'public');

// viewed at http://localhost:8080
app.get('/', function(req, res) {
    res.sendFile(path.join(public, 'index.html'));
});

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

app.listen(8080);

public클라이언트 측 코드가있는 폴더는 어디에 있습니까?

으로 제안 하여 @ATOzTOA에 의해 명확히 @Vozzie , path.join인수로 가입 경로를 걸립니다은 +경로에 하나의 인자를 전달합니다.


답변

const path = require('path');

const express = require('express');

const app = new express();
app.use(express.static('/media'));

app.get('/', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'media/page/', 'index.html'));
});

app.listen(4000, () => {
    console.log('App listening on port 4000')
})


답변

npm install serve-index

var express    = require('express')
var serveIndex = require('serve-index')
var path = require('path')
var serveStatic = require('serve-static')
var app = express()
var port = process.env.PORT || 3000;
/**for files */
app.use(serveStatic(path.join(__dirname, 'public')));
/**for directory */
app.use('/', express.static('public'), serveIndex('public', {'icons': true}))

// Listen
app.listen(port,  function () {
  console.log('listening on port:',+ port );
})


답변

app.js에서 아래에서 사용하십시오.

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

(folderName은 파일이있는 폴더입니다)-이러한 자산은 서버 경로를 통해 직접 액세스합니다 (예 : http : // localhost : 3000 / abc.png (여기서 abc.png는 folderName 폴더 안에 있음)).