Expressjs не загружает таблицы стилей на героку, выдавая ошибку 500

Я запускаю установку Expressjs на героку, и она не загружает таблицы стилей.

Я нажимаю ctrl+u, а затем нажимаю ссылку на таблицу стилей и получаю эту ошибку:

TypeError: Object #<SendStream> has no method 'on'
    at Object.static [as handle] (/app/node_modules/express/node_modules/connect/lib/middleware/static.js:75:8)
    at next (/app/node_modules/express/node_modules/connect/lib/proto.js:190:15)

Когда я перехожу по URL-адресу '/stylesheets/style.css', я получаю эту ошибку:

Express
500 TypeError: Object #<SendStream> has no method 'on'

    at Object.static [as handle] (/app/node_modules/express/node_modules/connect/lib/middleware/static.js:75:8)
    at next (/app/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at /app/node_modules/stylus/lib/middleware.js:174:46
    at /app/node_modules/stylus/lib/middleware.js:208:20

Все работает локально.

вот пакет.json

  {
    "name": "app-name",
      "version": "0.0.1",
      "private": true,
      "scripts": {
      "start": "node app"
     },
     "dependencies": {
       "express": "3.0.0rc1",
       "jade": "*",
       "stylus": "*"
     }
   }

Приложение.js:

/**
 * Module dependencies.
 */
 var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
});

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

app.get('/', routes.index);
app.get('/about', routes.about);

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

Профайл:

web: node app.js

Если я продолжаю обновлять, это приводит к сбою приложения.


person silasjmatson    schedule 03.08.2012    source источник


Ответы (3)


Я смог решить эту проблему, указав зависимости движка в package.json.

{
  "name": "app-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "3.0.0rc1",
    "jade": "*",
    "stylus": "*"
  },
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.41"
  }
}
person silasjmatson    schedule 03.08.2012
comment
Кто-нибудь может пояснить, почему указание версий движка node/npm решает проблему сбоя запроса статического контента в Express? Я голосую за, потому что это сработало для меня, но это немного сбивает с толку?! - person warriorpostman; 28.11.2012
comment
Я предполагаю, что он использует неправильные по умолчанию? ... кто-то с немного большими знаниями, чем я, должен отредактировать мой ответ, чтобы сделать его окончательным. - person silasjmatson; 28.11.2012
comment
stackoverflow.com/questions/11865214/ Связанная проблема? - person silasjmatson; 28.11.2012
comment
Это сработало и для меня. Хотя мои версии node и npm были новее, чем у Heroku, что вызывало ошибку компиляции. Я просто использовал самые новые версии Heroku (версии указаны в сообщении об ошибке), и, к счастью, это сработало. - person Lavamantis; 15.01.2013

Я нашел ответ! у вас неправильное время выполнения приложения, отправленного в облако, вы можете сделать это

vmc push yourappname --runtime node08

я надеюсь, что смогу помочь тебе

person ice4c    schedule 14.08.2012
comment
когда вы отправляете приложение в облако, сначала вы должны выбрать один из [node04 node06 node08], и как только вы выберете node04 и node06, clound может запомнить его, поэтому у вас нет возможности изменить свою версию Node без вас нажмите приложение снова - person ice4c; 14.08.2012

У меня была такая же проблема, и я обнаружил, что для меня работает следующая команда (через Heroku CLI):

Конфигурация героку: добавить NODE_ENV=производство

Это было связано с указанием версий Node и NPM, как упоминал Сайлас.

(через http://quickleft.com/blog/getting-started-with-express-in-node)

person Josh Gummersall    schedule 06.01.2013