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) 

尝试将(应用)variables传递给以下需要:

 /** * 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')); }); 

在以下文件中使用应用程序variables:

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

我知道variables作用域是从一个JS文件到另一个不同。 但是为什么下面这行:

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

不通过应用程序variables?

CoffeeScript对缩进非常敏感。 这个代码应该工作:

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

就在这儿:

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

错误不在app.js ,在你的CoffeeScript文件中。 看看它正在编译到 :

 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的缩进和它app.get所有内容):

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