2016-01-11 17 views
8

Node + MongoDB tabanlı REST API yerel Node sunucusunda çalışıyor ve doğru çıktıyı veriyor. Ancak Express (muhtemelen!), Openhift uygulamasında kullanıldığında 400 Bad Request hatasını döndürür. Uygulamayı nasıl ayıklayabilirim? Suçlama yönteminde bazı console.log ifadeleri koyarak denedim, ancak bunlar bile çağrılmadı.Node.js hata veriyor 400 ancak yerel makinede düzgün çalışıyor

btw, bir örnek 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); 

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

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

'i çağırma Postman'da POST ilerotası, yerel sunucuda json'da beklenen verileri döndürür, ancak Openhift'e dağıtıldığında HTTP 400 Bad Request değerini döndürür. Hatta OpenShift'teki versiyona express'u düşürmeyi denedim, ancak sorun aynı kalıyor.

+0

sen verebileceğini de OpenShift üzerinde günlük dosyalarında herhangi bir bilgi var mı? –

+0

Uygulama her zamanki gibi çalışıyor. Herhangi bir günlük dosyasında çıktı yok. Hata gönderildikten sonra uygulama sonlandırılmıyor. –

+0

Kod? Sorunuz, bazı bağlamlar olmadan cevaplanamaz. –

cevap

3

Çözüldü! Görünüşe göre, passport.js suçluydu. Passport, (email,password,function())'u geçerken (username,password,function()) alır.

auth.js nihai kodu:

passport.use(new LocalStrategy({usernameField: 'email', 
          passwordField: 'password'}, 
     (function(username,password,callback) { 
İlgili konular