2012-08-24 51 views
1

,我發現了以下錯誤:Node.js的範圍錯誤

/Users/nblavoie/Desktop/HotPie/HotPie/apps/authentication/routes.coffee:6 
    app.get('/login', function(req, res) { 
^
ReferenceError: app is not defined 
    at Object.<anonymous> (/Users/nblavoie/Desktop/HotPie/HotPie/apps/authentication/routes.coffee:6:3) 
    at Object.<anonymous> (/Users/nblavoie/Desktop/HotPie/HotPie/apps/authentication/routes.coffee:15:4) 
    at Module._compile (module.js:449:26) 
    at Object.require.extensions..coffee (/Users/nblavoie/Desktop/HotPie/HotPie/node_modules/coffee-script/lib/coffee-script/coffee-script.js:22:21) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Module.require (module.js:362:17) 
    at require (module.js:378:17) 
    at Object.<anonymous> (/Users/nblavoie/Desktop/HotPie/HotPie/app.js:31:1) 
    at Module._compile (module.js:449:26) 

雖然試圖通過(應用程序)變量以下要求:

/** 
* Module dependencies. 
*/ 

require('coffee-script'); 

var express = require('express') 
    , 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(express.static(path.join(__dirname, 'public'))); 
}); 

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

// Routes 
**require('./apps/authentication/routes')(app);** 

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

使用應用程序變量中以下文件:

routes = (app) -> 
app.get '/login', (req, res) -> 
    res.render 'views/login', 
     title: 'Login' 
     stylesheet: 'login' 
module.exports = routes 

我知道變量作用域從一個JS文件到另一個不同。但是爲什麼下面的行:

require('./apps/authentication/routes')(app); 

不通過應用程序變量?

+1

我們可能會需要看到'(一些其他的代碼在這裏)' – voithos

+0

我更新的代碼和堆棧錯誤。 –

+0

我找到了一個可能的解決方案。通過刪除應用程序變量的infront,我沒有得到錯誤了。是因爲我正在改變變量範圍嗎? app = express(); –

回答

3

CoffeeScript對縮進非常敏感。此代碼應工作:

routes = (app) -> 
    app.get '/login', (req, res) -> 
     res.render 'views/login', 
      title: 'Login' 
      stylesheet: 'login' 
module.exports = routes 
+0

這實際上並不正確。 'module.export ...'這行是縮進的,這意味着它將在'routes'函數中被編譯。這意味着出口產品線實際上不會運行。它需要不被縮進。 – voithos

+0

是的,我編輯我的答案。 –

4

就在這裏:

ReferenceError: app is not defined 
    at Object.<anonymous> (/Users/nblavoie/Desktop/HotPie/HotPie/apps/authentication/routes.coffee:6:3) 

的錯誤不是在app.js,它在你的CoffeeScript文件。退房what it's compiling to

var routes; 

routes = function(app) {}; 

app.get('/login', function(req, res) { 
    return res.render('views/login', { 
    title: 'Login', 
    stylesheet: 'login' 
    }); 
}); 

module.exports = routes; 

注意routes是一個空的功能?是的,你錯過了縮進。你的CoffeeScript更改爲以下應該修復它(注意的app.get後,壓痕和一切):

routes = (app) -> 
    app.get '/login', (req, res) -> 
     res.render 'views/login', 
      title: 'Login', 
      stylesheet: 'login' 

module.exports = routes