Express-js가 정적 파일을 가져올 수없는 이유는 무엇입니까?


308

코드를 가장 간단한 express-js 앱으로 축소했습니다.

var express = require("express"),
    app = express.createServer();
app.use(express.static(__dirname + '/styles'));
app.listen(3001);

내 디렉토리는 다음과 같습니다

static_file.js
/styles
  default.css

그러나 액세스 할 때 http://localhost:3001/styles/default.css다음 오류가 발생합니다.

Cannot GET / styles /
default.css

그리고를 사용 express 2.3.3하고 node 0.4.7있습니다. 내가 뭘 잘못하고 있죠?


답변:


491

시도하십시오 http://localhost:3001/default.css.

/styles요청 URL에 포함 시키 려면 다음을 사용하십시오.

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

이 페이지 의 예를 살펴보십시오 .

//Serve static content for the app from the "public" directory in the application directory.

    // GET /style.css etc
    app.use(express.static(__dirname + '/public'));

// Mount the middleware at "/static" to serve static content only when their request path is prefixed with "/static".

    // GET /static/style.css etc.
    app.use('/static', express.static(__dirname + '/public'));

42
감사합니다. Node 및 Express를 처음 사용하는 사람으로서 Connect가 미들웨어 문서가있는 곳임을 발견 할 때까지 Express 문서가 개략적으로 보입니다.
Nate

4
네. 내 경우 에는 누락 된 슬래시 였습니다 .
borisdiakur

필자의 경우 두 번째 예제에서 설명한 것처럼 마운트 경로가 경로에 포함되어 있다는 것을 알지 못했습니다. 감사!
Mike Cheel

새로 설치하는 경우 Express 모듈이 제대로 설치되었는지 확인해야하며 ( expressjs.com/en/starter/installing.html ) Giacomo와 같이 경로와 디렉토리 이름을 확인해야합니다.;
Spl2nky

path.join크로스 플랫폼 디렉토리 구분 기호 문제를 극복하기 위해 항상 사용하십시오 . path.join (__ dirname, '/')
Doug Chamberlain

35

나도 같은 문제가있어. 다음 코드로 문제를 해결했습니다.

app.use('/img',express.static(path.join(__dirname, 'public/images')));
app.use('/js',express.static(path.join(__dirname, 'public/javascripts')));
app.use('/css',express.static(path.join(__dirname, 'public/stylesheets')));

정적 요청 예 :

http://pruebaexpress.lite.c9.io/js/socket.io.js

더 간단한 해결책이 필요합니다. 존재합니까?


최적 여부에 관계없이 솔루션을 공유해 주셔서 감사합니다. 최적화를 위해 문제를 다시 열려면 새로운 상황을 자세히 설명하는 새로운 질문을 게시하십시오. 최적화가 유일한 목적이라면 질문은 SO Code Review에 더 적합 할 것 입니다.

15

default.css 에 이용 가능해야한다 http://localhost:3001/default.css

stylesapp.use(express.static(__dirname + '/styles'));단지는에보고 표현 알려줍니다 styles봉사하는 정적 파일 디렉토리. 사용 가능한 경로의 일부를 혼동하지 않습니다.


3
전적으로! 어떤 그것에에게 당신이 express.js에 규칙입니다 /public가지고있는 css, js, img폴더 당신이 할 수 있습니다 http://localhost:3001/css/default.css:)
키트 Sunde

15

이것은 나를 위해 작동합니다 :

app.use('*/css',express.static('public/css'));
app.use('*/js',express.static('public/js'));
app.use('*/images',express.static('public/images'));

9

server.js에서 :

var express   =     require("express");
var app       =     express();
app.use(express.static(__dirname + '/public'));

express와 app을 별도로 선언하고 'public'이라는 이름의 폴더를 만들거나 원하는대로 만들 수 있지만이 폴더에 액세스 할 수 있습니다. 템플릿 src에서 / public의 상대 경로 (또는 폴더 운명의 이름을 정적 파일)를 추가했습니다. 경로에있는 막대를주의하십시오.


6

나를 위해 일한 것은 다음과 같습니다.

app.use(express.static(__dirname + 'public/images'));app.js 를 작성하는 대신

간단히 쓰기 app.use(express.static('public/images'));

즉, 경로에서 루트 디렉토리 이름을 제거하십시오. 그런 다음 다른 js 파일에서 정적 경로를 효과적으로 사용할 수 있습니다. 예를 들면 다음과 같습니다.

<img src="/images/misc/background.jpg">

도움이 되었기를 바랍니다 :)


이것은 내 문제를 해결했습니다. 내 코드에서 CSS 경로는 __dirname 연결 (path.join 사용)에서도 정상적으로 작동했지만 js 가져 오기가 실패했습니다.
Chim

도움이 된 것을 기쁘게 생각합니다 :)
Amir Aslam

5

내 응용 프로그램에서 Bootstrap CSS, JS 및 Fonts를 사용하고 있습니다. 나는라는 폴더 생성 asset루트 응용 프로그램의 디렉토리와 장소 그 안에 모든 폴더에 있습니다. 그런 다음 서버 파일에서 다음 줄을 추가했습니다.

app.use("/asset",express.static("asset"));

이 줄을 사용하면 다음과 같은 경로 접두사 asset에서 디렉토리 에있는 파일을로드 할 수 있습니다 ./assethttp://localhost:3000/asset/css/bootstrap.min.css

이제 뷰에서 아래처럼 CSS와 JS를 간단히 포함시킬 수 있습니다.

<link href="/asset/css/bootstrap.min.css" rel="stylesheet">

5

정적 파일 (css, images, js 파일)을 제공하기 위해 두 단계 만 거치면됩니다.

  1. css 파일의 디렉토리를 내장 미들웨어 express.static에 전달하십시오.

    var express = require('express');
    var app = express();
    /*public is folder in my project directory contains three folders
    css,image,js
    */
    //css  =>folder contains css file
    //image=>folder contains images
    //js   =>folder contains javascript files
    app.use(express.static( 'public/css'));
  2. CSS 파일 또는 이미지에 액세스하려면 URL http : // localhost : port / filename.css를 입력 하십시오. 예 : http : // localhost : 8081 / bootstrap.css

노트: CSS 파일을 HTML에 연결하려면 을 입력하십시오.<link href="file_name.css" rel="stylesheet">

이 코드를 작성하면

var express = require('express');
var app = express();
app.use('/css',express.static( 'public/css'));

정적 파일에 액세스하려면 url : localhost : port / css / filename.css를 입력 하십시오. 예 : http : // localhost : 8081 / css / bootstrap.css

참고 HTML로 링크 CSS 파일로는 다음과 같은 줄을 추가

<link href="css/file_name.css" rel="stylesheet">    

3

이것은 나를 위해 일했다

app.use(express.static(path.join(__dirname, 'public')));

app.use('/img',express.static(path.join(__dirname, 'public/images')));

app.use('/shopping-cart/javascripts',express.static(path.join(__dirname, 'public/javascripts')));

app.use('/shopping-cart/stylesheets',express.static(path.join(__dirname, 'public/stylesheets')));

app.use('/user/stylesheets',express.static(path.join(__dirname, 'public/stylesheets')));

app.use('/user/javascripts',express.static(path.join(__dirname, 'public/javascripts')));


1

내 CSS 파일을 찾아 경로를 추가하십시오.

app.get('/css/MyCSS.css', function(req, res){
  res.sendFile(__dirname + '/public/css/MyCSS.css');
});

그런 다음 작동하는 것 같습니다.


ExpressJS .use()express.static()메소드를 사용 하여 파일을 제공하는 위치를 보내야 하므로이 방법을 권장하지 않습니다 . 그렇지 않으면 공용 디렉토리에 파일 당 이러한 라우터 중 하나가 있으며 유지 관리하는 데 많은 오버 헤드가 있습니다.
Sgnl

이것은 해결 방법이지만 적절하다고 생각하지 않습니다. CSS와 JS 파일이 많은 경우 어떻게 관리 할 수 ​​있습니까?
arsho

0

위와 더불어 정적 파일 경로가 / (ex ... / assets / css) ...로 시작하여 기본 디렉토리 (/ main) 위의 디렉토리에 정적 파일을 제공하도록하십시오.


2
위에 무엇을 추가 하시겠습니까? 답변에 기재하십시오 (필요한 경우 게시 한 사람에게 신용을 제공하십시오). SO는 종종 답변 순서를 변경하여 처음 답변이 아닌 모든 답변을 볼 수 있습니다. 우리는 당신이 무슨 말을하는지 모른다.
Zachary Kniebel

0

만약 당신의 설정

myApp
  |
  |__ public
  |     |
  |     |__  stylesheets
  |     |     |
  |     |     |__ style.css
  |     |
  |     |___ img
  |           |
  |           |__ logo.png
  |
  |__ app.js

그런 다음
app.js를 넣으십시오.

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

style.css를 참조하십시오 (일부 .pug 파일).

link(rel='stylesheet', href='/static/stylesheets/style.css')

이름 바꾸기 단계 public-> static을 왜 소개 하시겠습니까? 나는 그것이 더 혼란스러운 추가 정보라고 말합니다. 그러나 다시 간접적 인
지시

0
  1. Nodejs 프로젝트에서 'public'이름으로 폴더 만들기
    폴더 .
  2. index.html 파일을 Nodejs 프로젝트 폴더에 넣습니다.
  3. 모든 스크립트와 CSS 파일을 공용 폴더에 넣습니다.
  4. 사용하다 app.use( express.static('public'));

  5. 과에서 index.html 스크립트의 올바른 경로에<script type="text/javascript" src="/javasrc/example.js"></script>

이제 모든 것이 잘 작동합니다.


0

정적 디렉토리

dir 구조는 위의 이미지 (정적 디렉토리)를 확인하십시오.

const publicDirectoryPath = path.join(__dirname,'../public')
app.use(express.static(publicDirectoryPath))


//  or

app.use("/", express.static(publicDirectoryPath))
app.use((req, res, next) => {
res.sendFile(path.join(publicDirectoryPath,'index.html'))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.