Использование экспресс, node.js и jade - style.css не отображается/не найден

Я пытаюсь понять, как использовать node.js с jade прямо сейчас, и я не могу заставить его использовать таблицу стилей css. Мой app.js выглядит так:

/* * Module dependencies */ 
var http    = require("http"),
express = require('express') , 
stylus = require('stylus')

//create an app server
var app = module.exports = express.createServer();

app.configure(function(){
  //set path to the views (template) directory
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(app.router);
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);

  app.use(stylus.middleware({
    debug: true,
    src: __dirname + '/views',
    dest: __dirname + '/public'
  }));  
  app.use(express.static(__dirname + 'public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

//handle GET requests on /
  app.get('/', function(req, res){res.render('index.jade'); 
});
//listen on localhost:3000
app.listen(3000);

Мой файл layout.jade выглядит так:

html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
  body!= body

И моя файловая структура:

App
  -node_modules
  -public
    -css
      style.css
    -img
    -js
  -views
    -routes
    -stylesheets
      style.styl
    index.jade
    layout.jade
  app.js
  package.json

Я загружаю веб-сайт правильно, но таблица стилей не загружается.


person Jaclyn Konzelmann    schedule 02.02.2014    source источник
comment
В пути, указанном для express.static(), отсутствует / -- __dirname + '/public' -- поэтому, вероятно, он пытается найти файлы в несуществующей папке Apppublic. path модуль также может помочь избежать этого: express.static(path.join(__dirname, 'public')).   -  person Jonathan Lonowski    schedule 02.02.2014
comment
Я изменил это на: app.use(express.static(path.join(__dirname, 'public'))); но я получаю ReferenceError: путь не определен, когда я делаю это изменение.   -  person Jaclyn Konzelmann    schedule 02.02.2014
comment
Извини. Вам придется require('path') так же, как и с http, express и т. д., поскольку это не глобальный в модулях.   -  person Jonathan Lonowski    schedule 02.02.2014
comment
Хорошо, добавьте: path = require('path') и он работает, но таблица стилей по-прежнему не включена.   -  person Jaclyn Konzelmann    schedule 02.02.2014


Ответы (3)


Вы хотите изменить свою линию

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

to

app.use(express.static(__dirname + '/public'));
person zimkies    schedule 02.02.2014
comment
У меня была такая же проблема, и это исправило ее для меня. Спасибо @zimkies! - person Cory Klein; 01.07.2014

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

разве это не должно быть href='/css/style.css' вместо этого?

person alex    schedule 02.02.2014
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его публикацией. - person Taylan Aydinli; 02.02.2014
comment
Это дает ответ на вопрос, присутствует ли эта опечатка в исходном коде. - person alex; 02.02.2014
comment
С другой стороны, может и нет, файловая структура немного запутана. В любом случае, в некоторых случаях вы не можете ответить на вопрос, вы можете только догадываться, в чем первопричина, и это такое же хорошее предположение, как и любое другое. - person alex; 02.02.2014

Я столкнулся с такой же проблемой, и для меня, так как у меня была та же строка кода, что и у вас:

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

Мне пришлось переместить мою папку css/ внутрь каталога public/, потому что все общедоступные статические файлы должны находиться внутри этого каталога.

Затем в моем файле Jade я использовал это:

link(rel="stylesheet", href="css/style.css")

Это работает для вас?

person Matheus Eduardo Freitag    schedule 29.08.2017