【问题标题】:Expressjs not loading stylesheets on heroku, giving 500 errorExpressjs 未在 heroku 上加载样式表,出现 500 错误
【发布时间】:2012-08-01 02:50:09
【问题描述】:

我正在 Heroku 上运行 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

在本地一切正常。

这是 package.json

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

app.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'));
});

Procfile:

web: node app.js

如果我继续刷新,应用程序会崩溃。

【问题讨论】:

    标签: node.js express stylesheet pug stylus


    【解决方案1】:

    我可以通过在 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"
      }
    }
    

    【讨论】:

    • 谁能解释一下为什么指定 node/npm 引擎版本可以解决 Express 中静态内容请求失败的问题?我正在投票,因为它对我有用,但这有点莫名其妙?!
    • 我假设它默认使用错误的? ...知识比我多一点的人应该编辑我的答案以使其明确。
    • 这对我也有用。虽然,我的 node 和 npm 版本比 Heroku 的版本新,这导致了编译错误。我刚刚使用了 Heroku 的最新版本(版本在错误消息中),幸运的是它有效。
    【解决方案2】:

    我找到了答案! 您将应用程序推送到云的运行时错误 你可以这样做

    vmc push yourappname --runtime node08
    

    希望能帮到你

    【讨论】:

    • 当你将应用推送到云端时,首先你应该选择[node04 node06 node08]之一,一旦你选择了node04和node06,云可能会记住它,所以你没有办法无需再次推送应用即可更改您的节点版本
    【解决方案3】:

    我刚遇到同样的问题,发现运行以下命令(通过 Heroku CLI)对我有用:

    heroku 配置:添加 NODE_ENV=production

    这与 Silas 提到的指定 Node 和 NPM 的版本有关。

    (通过http://quickleft.com/blog/getting-started-with-express-in-node

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多