[static] node.js Express 프레임 워크에서 두 개의 서로 다른 정적 디렉토리 설정

가능할까요? 정적 파일을 제공하기 위해 두 개의 다른 디렉토리를 설정하고 싶습니다. / public 및 / mnt라고 가정하겠습니다.



답변

다음 use()과 같이 추가 (첫 번째) 매개 변수를 지정하여 정적 파일이 웹에 제공되는 경로를 설정할 수도 있습니다 .

app.use("/public", express.static(__dirname + "/public"));
app.use("/public2", express.static(__dirname + "/public2"));

이렇게하면 두 로컬 디렉터리간에 장애 조치되는 하나의 URL 경로가 아니라 로컬 디렉터리를 미러링하는 두 개의 다른 디렉터리를 웹에서 얻을 수 있습니다.

즉, URL 패턴 :

http://your.server.com/public/*

다음과 같은 public동안 로컬 디렉토리에서 파일을 제공합니다 .

http://your.server.com/public2/*

로컬 디렉토리에서 파일을 제공합니다 public2.

BTW 이것은 또한 정적이 서버의 루트에서 파일을 제공하지 않고 더 정규화 된 경로에서 제공하는 것을 원하지 않는 경우에도 유용합니다.

HTH


답변

디렉토리를 하나의 보이는 디렉토리로 “병합”할 수도 있습니다.

디렉토리 구조

  • /static
  • /alternate_static

암호

app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));

static 및 alternate_static은 모두 동일한 디렉토리에있는 것처럼 제공됩니다. 그러나 파일 이름 클로버를 조심하십시오.


답변

한 번의 미들웨어 주입으로는 불가능하지만 static미들웨어를 여러 번 주입 할 수 있습니다 .

app.configure('development', function(){
    app.use(express.static(__dirname + '/public1'));
    app.use(express.static(__dirname + '/public2'));
});

설명

에서 봐 연결 / lib 디렉토리 / 미들웨어 / static.js # 143 :

path = normalize(join(root, path));

options.root당신이 정의하는 정적 루트이며, express.static또는 connect.static전화, 그리고 path요청의 경로입니다.

connect / lib / middleware / static.js # 154 에서 자세히 살펴보십시오 .

  fs.stat(path, function(err, stat){
    // ignore ENOENT
    if (err) {
      if (fn) return fn(err);
     return ('ENOENT' == err.code || 'ENAMETOOLONG' == err.code)
       ? next()
       : next(err);

경로를 한 번만 확인하고 파일을 찾을 수없는 경우 요청이 다음 미들웨어로 전달됩니다.

Connect 2.x 업데이트

코드에 대한 링크는 Connect 2.x에 대해 실제적이지 않지만 여러 정적 미들웨어 사용은 이전과 같이 여전히 가능합니다.


답변

const express = require('express');
const path = require('path');
const pagesPath = path.join(__dirname, '/cheatsheet');
const cssPath = path.join(__dirname, '/stylesheet');
const port = process.env.PORT || 3000;

var app = express();

app.use("/cheatsheet" ,express.static(pagesPath));
app.use("/stylesheet",express.static(cssPath));

app.get('/',(request,response)=>{
    response.send('Hello CSS!!!');
  });

app.get('/bad',(request,response)=>{
response.send({error: 'Bad Request'});

});
app.listen(port, ()=> {
console.log(`Server is running on Port ${port}` );
console.log(__dirname);

});

// folder structure
/cheatsheet/index.html
/stylesheet/style.css


답변