2016-01-11 10 views
8

Mój REST API oparty na Node + MongoDB działa dobrze na lokalnym serwerze Node i zwraca poprawne dane wyjściowe. Ale Express (prawdopodobnie!) Zwraca błąd 400 Bad Request po wdrożeniu na Openshift. Każdy pomysł, jak mogę debugować aplikację? Próbowałem umieszczać niektóre instrukcje console.log w niewłaściwej metodzie, ale nawet te nie były wywoływane.Node.js na Openshift daje błąd 400, ale działa poprawnie na komputerze lokalnym

okazji, przykładowy kod:

app.js:

var express = require('express'); 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 
var app = express(); 

var userController = require('./Controllers/user'); 
var authController = require('./Controllers/auth'); 
mongoose.connect(process.env.OPENSHIFT_MONGODB_DB_URL + 'dbname'); 
app.use(bodyParser.urlencoded({extended:false})); 
app.use(bodyParser.json()); 
app.use(function(req, res, next) { 
res.setHeader('Access-Control-Allow-Origin', '*'); 
res.setHeader('Access-Control-Allow-Methods', 'GET, POST'); 
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With , content-type, Authorization ,x-access-token ,' + 
    'x-auth-email ,x-auth-password'); 
next(); 
}); 

app.post('/signin',authController.authorize,userController.signin); 

Kontrolery/auth.js:

var passport = require('passport'); 
var User = require('../Models/user'); 
var LocalStrategy = require('passport-local').Strategy; 

passport.use(new LocalStrategy(function(email,password,callback) { 
console.log('passport called'); 
User.findOne({email:email},function(err, user){ 
    console.log('email at passport: ' + email); 
    if(err){ 
     return callback(err);} 


    if(!user){return callback(null,false);} 

    user.matchPassword(password,function(err,isMatch){ 
     if(err){return callback(err);} 

     if(!isMatch){return callback(null,false);} 

     console.log('isMatch: ' + isMatch); 
     return callback(null,user); 
     }); 
    }); 
})); 

exports.authorize = passport.authenticate('local', { session : false }); 

Kontrolery/user.js:

var User = require('../Models/user'); 
var jwt = require('jsonwebtoken'); 
exports.signin = signin= function (req,res){ 
User.findOne({email:req.body.email},function(err, user){ 
    if(err){res.send(err);} 


    console.log(user); 
     user.token = jwt.sign(user.password, 'SECRET_KEY'); 
     user.save(function (err,user) { 
      if (err) { 
       res.send(err); 
      } 
      res.json({email:user.email,token:user.token}); 
     }) 
}); 
}; 

Wywołanie signin trasa z POST w Postmanie zwraca oczekiwane dane w jsonie na serwerze lokalnym, ale zwraca HTTP 400 Bad Request w przypadku wdrażania na Openshift. Próbowałem nawet obniżyć wersję express do wersji na Openshift, ale problem pozostaje ten sam.

+0

Czy istnieje jakiekolwiek informacje w logach na OpenShift że można dostarczyć? –

+0

Aplikacja działa normalnie. Brak danych wyjściowych w żadnym pliku dziennika. Aplikacja nie kończy się po wysłaniu błędu. –

+0

Kod? Na twoje pytanie nie można odpowiedzieć bez jakiegoś kontekstu. –

Odpowiedz

3

Rozwiązany! Wygląda na to, że winowajcą była passport.js. Passport trwa (username,password,function()) podczas przechodzenia (email,password,function()).

Ostateczny kod auth.js:

passport.use(new LocalStrategy({usernameField: 'email', 
          passwordField: 'password'}, 
     (function(username,password,callback) { 
Powiązane problemy