2015-07-03 1 views
0

Я пытаюсь создать веб-приложение Node JS + Express с помощью Parse.com. У меня есть это в моем сервере ЯШ:Parse undefined в Node JS Controller

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 [as 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) в Route.dispatch ([REST_OF_PATH_REMOVED] /app/node_modules/express/lib/router/route.js:112:3) на Layer.handle [as 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 в Function.process_params ([REST_OF_PATH_REMOVED] /app/node_modules/express/lib/router/index.js:330:12) на следующем ([REST_OF_PATH_REMOVED] /app/node_modules/express/lib/router/index.js: 271: 10) в [REST_OF_PATH_REMOVED] /app/node_modules/body-parser/lib/read.js:121:50 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 install parse» на всякий случай, и он все еще не определен. – Amir

0

Parse находится вне зоны действия fn. Вы можете либо принести заявление в контроллер в соответствии с рекомендациями до или (хотя и не хорошая практика) делают Разбираем глобальным (только будьте осторожны, не переписывая переменной в других частях вашего приложения)

app.js

... 

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

... 

controller.js

... 

new Parse.query ... 

... 
+0

Должен ли я включать объявление для каждого контроллера, который я создаю? Это не кажется правильным. Я также предпочитаю не превращать его в глобальную переменную. – Amir

+0

Если вы сделаете это глобальным, вам не нужно будет объявлять его нигде, это будет вездесущая переменная (как «окно» в браузере) – cmlndz

+0

Сделать это глобальным, это, конечно, не очень хорошая практика, и если вам не нравится то вам нужно объявить его на каждом контроллере, просто убедитесь, что вы объявили его в пределах области действия функции т. е. 'var Parse = ...' 'module.exports.create ...' – cmlndz