2015-07-03 45 views
0

我想建立使用Parse.com節點JS +快速的Web應用程序。我有這個在我的服務器JS:解析未定義的節點JS控制器

var express = require('express'), 
    app = express(), 
    bodyParser = require('body-parser'), 
    Parse = require('parse').Parse; 
    projects = require('./controllers/projects'); 

// Parse fun 
Parse.initialize('MY_APP_ID_HERE', 'MY_JS_KEY'); 

app.use(bodyParser.urlencoded({ extended: false })); 

app.get('/projects',projects.index); 
app.get('/projects/new',projects.new); 

app.listen(9000); 

現在在我的項目控制器:

module.exports.create = function(req,res){ 
    var projectObject = Parse.Object.extend("ProjectObject"); 
    var project = new projectObject(); 
    project.save(req.body).then(function(object) { 
     res.redirect('/projects'); 
    }); 
}; 

module.exports.index = function(req,res){ 
    var projectObject = Parse.Object.extend("ProjectObject"); 
    var query = new Parse.Query(projectObject); 
    query.limit(100); 
    query.first({ 
     success: function(projects) { 
      // Successfully retrieved the projects. 
      res.json(projects); 
     }, 
     error: function(error) { 
      console.log("Error: " + error.code + " " + error.message); 
     } 
    }); 
}; 

這是錯誤我得到:

的ReferenceError:解析未在module.exports定義 .create([REST_OF_PATH_REMOVED] /app/controllers/projects.js:5:22) 在Layer.handle [按handle_request]([REST_OF_PATH_REMOVED] /app/node_modules/express/lib/router/layer.js:95:5 )在下一個([REST_OF_PATH_REMOVED] /應用程序 /node_modules/express/lib/router/route.js:131:13) at Route.dispatch([REST_OF_PATH_REMOVED] /app/node_modules/express/lib/router/route.js:112:3) at Layer.handle [按handle_request]([REST_OF_PATH_REMOVED] /app/node_modules/express/lib/router/layer.js:95:5) 在[REST_OF_PATH_REMOVED] /app/node_modules/express/lib/router/index.js:277:22 ([REST_OF_PATH_REMOVED] /app/node_modules/express/lib/router/index.js處的Function.process_params([REST_OF_PATH_REMOVED] /app/node_modules/express/lib/router/index.js:330:12) ( ) 271:10) at [REST_OF_PATH_REMOVED] /app/node_modules/body-parser/lib/read.js:121:5 at done([REST_OF_PATH_REMOVED]/app/node_modules/body-parser/node_modules/raw-body/index的.js:233:14)

回答

0

簡單的答案會是移動

var Parse = require('parse').Parse; 

Parse.initialize('MY_APP_ID_HERE', 'MY_JS_KEY'); 

到項目控制器。根據發佈的代碼,它們在您的server.js文件中不是必需的。

+0

不幸的是,還在說「解析是不確定的」,並抱怨當它添加到項目控制器頂部的初始化線。 – Amir

+0

你用'npm install parse'安裝瞭解析模塊嗎? –

+0

是的,我已經安裝瞭解析。我將它作爲packages.json中的依賴項包含在內。我只是運行它「npm安裝解析」,以防萬一,它仍然是未定義的。 – Amir

0

解析是出了FN的範圍。你既可以把申報到控制器的建議或之前(雖然不是一個好的做法)作出解析全局(只是由於不覆蓋在你的應用程序的其他部分的變量小心)

app.js

... 

global.Parse = require('parse').Parse; 

... 

controller.js

... 

new Parse.query ... 

... 
+0

我必須爲每個我創建的控制器包含聲明嗎?這看起來不正確。我也不想讓它成爲一個全局變量。 – Amir

+0

如果你使它成爲全局的,你不需要在其他任何地方聲明它,它將是一個無所不在的變量(就像瀏覽器上的「窗口」一樣) – cmlndz

+0

使它成爲全局它肯定不是一個好習慣,如果你不喜歡那麼你需要在每個控制器上聲明它,只要確保你聲明它在函數範圍 即: 'var Parse = ...' 'module.exports.create ...' – cmlndz