Express-js не может получить мои статические файлы, почему? - PullRequest
284 голосов
/ 08 мая 2011

Я сократил свой код до самого простого приложения 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.Что я делаю не так?

Ответы [ 13 ]

458 голосов
/ 08 мая 2011

Попробуйте http://localhost:3001/default.css.

Чтобы в вашем URL-адресе был /styles, используйте:

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'));
28 голосов
/ 19 апреля 2013

У меня такая же проблема. Я решил проблему с помощью следующего кода:

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

Мне нужно более простое решение. Это существует?

14 голосов
/ 20 июня 2012

default.css должно быть доступно на http://localhost:3001/default.css

styles в app.use(express.static(__dirname + '/styles')); просто говорит Express, чтобы искать в каталоге styles статический файл для обслуживания. Тогда он (не сбивает с толку) не является частью пути, по которому он доступен.

9 голосов
/ 30 августа 2017

Эта работа для меня:

app.use('*/css',express.static('public/css'));
app.use('*/js',express.static('public/js'));
app.use('*/images',express.static('public/images'));
8 голосов
/ 25 мая 2015

В вашем server.js:

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

Вы объявили express и app отдельно, создали папку с именем public или как вам нравится, и все же вы можете получить доступ к этой папке.В вашем шаблоне src вы добавили относительный путь из / public (или имя вашей папки в статических файлах).Остерегайтесь баров на маршрутах.

4 голосов
/ 22 июня 2017

для обслуживания статических файлов (css, images, js files) всего за два шага:

  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 ex: 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

note , чтобы связать CSS-файлы с HTML, просто добавьте следующую строку

<link href="css/file_name.css" rel="stylesheet">    
3 голосов
/ 12 января 2017

Я использую Bootstrap CSS, JS и шрифты в своем приложении. Я создал папку с именем asset в корневом каталоге приложения и поместил в нее все эти папки. Затем в файл сервера добавляется следующая строка:

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

Эта строка позволяет мне загружать файлы из каталога asset с префиксом пути /asset, например: http://localhost:3000/asset/css/bootstrap.min.css.

Теперь в представлениях я могу просто включить CSS и JS, как показано ниже:

<link href="/asset/css/bootstrap.min.css" rel="stylesheet">
2 голосов
/ 18 июля 2017

этот работал для меня

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')));
2 голосов
/ 08 декабря 2016

Что сработало для меня:

Вместо записи app.use(express.static(__dirname + 'public/images')); в вашем app.js

Просто напиши app.use(express.static('public/images'));

т.е. удалить имя корневого каталога в пути. И тогда вы можете эффективно использовать статический путь в других js-файлах, например:

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

Надеюсь, это поможет:)

1 голос
/ 02 сентября 2016

Попробуйте получить к нему доступ с помощью http://localhost:3001/default.css.

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

Вы на самом деле даете ему имя папки, т.е. стили, а не ваш подчиненный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...