2016-02-18 1 views
1

Есть ли причина, по которой я получаю эту ошибку при запуске сервера анализа локально, но не при размещении на Heroku? Статус: 100 Сообщение: Ошибка XMLHttpRequest: «Не удалось подключиться к API-интерфейсу»Parse Server, работающий локально, имеет ошибку при вызове User signUp

У меня установлен и запущен mongodb локально. У меня также есть файл .env, который содержит APP_ID и MASTER_KEY, которые попадают в локальную сеть с dotenv.

Вот сокращенный пример того, что я пытаюсь сделать ...

var express = require('express'); 
var bodyParser = require('body-parser'); 
var dotenv = require('dotenv').config({silent: true}); 
var ParseServer = require('parse-server').ParseServer; 
var Parse = require('parse/node'); 

// Set up the parse server 
var databaseUri = process.env.DATABASE_URI || process.env.MONGOLAB_URI; 
var api = new ParseServer({ 
    databaseURI: databaseUri || 'mongodb://localhost:27017/dev', 
    cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js', 
    appId: process.env.APP_ID || 'myAppId', 
    masterKey: process.env.MASTER_KEY || '' 
}); 

// Set up express 
var app = express(); 
app.use(express.static(__dirname + '/public')); 
var mountPath = process.env.PARSE_MOUNT || '/parse'; 
app.use(mountPath, api); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

// Initialize parse so that I can use in my routes and controllers 
Parse.initialize(process.env.APP_ID,'unused'); 
Parse.serverURL = process.env.SERVER_URI || 'http://locahost:1337/parse'; 

// Routes 
app.get('/', function(req, res) { 
    res.status(200).send('[form goes here that sends POST to "/sign-up"]'); 
}); 
app.post('/sign-up', function(req, res) { 
    var user = new Parse.User(); 
    user.set("email", req.body.inputEmail); 
    user.set("password", req.body.inputPassword); 

    user.signUp(null, { 
    success: function(user) { 
     res.status(200).send('Signup Success!'); 
    }, 
    error: function(user, error) { 
     res.status(200).send('Signup Failed'); 
    } 
    }); 
}); 

var port = process.env.PORT || 1337; 
app.listen(port); 

ответ

2

ошибка Unable to connect to the Parse API означает, что SDK Анализировать не может подключиться к данному ServerURL. В вашем случае это опечатка: http://locahost:1337/parse должно быть http://localhost:1337/parse?

Вы также должны удалить var Parse = require('parse/node'); и пользовательскую инициализацию, поскольку синтаксический анализ sdk будет инициализирован на Parse Server, а Parse будет доступен по всему миру. Взгляните на пример usage в readme. Ваш код должен выглядеть следующим образом:

var express = require('express'); 
var bodyParser = require('body-parser'); 
var dotenv = require('dotenv').config({silent: true}); 
var ParseServer = require('parse-server').ParseServer; 

// Set up the parse server 
var databaseUri = process.env.DATABASE_URI || process.env.MONGOLAB_URI; 
var api = new ParseServer({ 
    databaseURI: databaseUri || 'mongodb://localhost:27017/dev', 
    cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js', 
    appId: process.env.APP_ID || 'myAppId', 
    masterKey: process.env.MASTER_KEY || '', 
    serverURL: process.env.SERVER_URI || 'http://localhost:1337/parse' 
}); 

// Set up express 
var app = express(); 
app.use(express.static(__dirname + '/public')); 
var mountPath = process.env.PARSE_MOUNT || '/parse'; 
app.use(mountPath, api); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

// Routes 
app.post('/sign-up', function(req, res) { 
    var user = new Parse.User(); // Parse available as a global variable 
}); 

var port = process.env.PORT || 1337; 
app.listen(port); 
+0

Да, это все! Спасибо за помощь Саймона. – enjoyjeremy

+0

Еще один вопрос: у меня возникли проблемы с получением User.logIn для создания сеанса с помощью этого метода. Я могу успешно зарегистрировать пользователя, но когда я перехожу к другим маршрутам, у меня нет доступа к объекту 'request.user', потому что я считаю, что он доступен только в облачных функциях. Другими словами: если я не могу использовать 'Parse.User.current()' с parse-server, как можно использовать 'request.user' в' app.get ('/ route') 'routes? – enjoyjeremy

+0

Хороший вопрос! Вы должны сделать это вручную сейчас. Оформить мой ответ здесь для примера реализации: https://github.com/ParsePlatform/parse-server/issues/497 –

0

для меня, когда развернуть ЕВ все было нормально, но работать на местном уровне, я должен был сделать:

Parse.initialize("YOUR_APP_ID"); 
Parse.serverURL = process.env.SERVER_URL ||'http://localhost:1337/parse'; 

после инициализации синтаксического анализа сервера для того, чтобы облачный код работал

В противном случае я получил ошибку «не могу подключиться к parse api».

Смежные вопросы