尝试使用带有expressJS应用程序的haml-coffee的奇怪错误

时间:2012-08-26 15:22:28

标签: javascript node.js express substring syntax-error

以下是haml-coffee guides后面的app.js文件:

// misc requirements
var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path');

// setup app
var app = express();

// set default engine to haml-coffee
app.engine( 'hamlc', require('haml-coffee'.__express ));

// configure misc stuff
app.configure(function(){
  app.set('port', process.env.PORT || 3000); // set localhost port to 3000
  app.set('views', __dirname + '/views');    // setup views (templates)
  app.set('view engine', 'hamlc');           // use haml-coffee as default templating engine
  app.set('title', 'Learn Some Code');       // set the website title

  app.use(express.favicon());                // favicon handling
  app.use(express.logger('dev'));            // logging

  app.use(express.bodyParser());
  app.use(express.methodOverride());

  app.use(app.router); // use the router
  app.use(express.static(path.join(__dirname, 'public')));
});

// only configure this for development
app.configure('development', function(){
  app.use(express.errorHandler());
});

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

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

但是当我跑node app.js时......我得到了这个奇怪的错误:

module.js:236
  var start = request.substring(0, 2);
                      ^
TypeError: Cannot call method 'substring' of undefined
    at Function.Module._resolveLookupPaths (module.js:236:23)
    at Function.Module._resolveFilename (module.js:328:31)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/Users/chris/src/learnsomecode/app.js:11:22)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

1 个答案:

答案 0 :(得分:2)

你的要求有一个小错字。变化

app.engine( 'hamlc', require('haml-coffee'.__express ));

app.engine( 'hamlc', require('haml-coffee').__express );

'haml-coffee'.__express解析为undefined,这会导致require(undefined)抛出Cannot call method 'substring' of undefined错误。