2017-03-27 6 views
1

こんにちは私はノードJSアプリケーションに次の問題があります。なぜ私はreq.bodyを1つのルートに持っていないのですか?ノードJS

私は認証をしたいのですが、私はそのルート上でPOSTを送信すると "req.body.username = undefined"となります。

このルートでのみ、他のルートが問題なくreq.bodyを取得します。

Debug: req.body undefined

パッケージ:

var config = require('./config'); 
var express = require('express'); 
var app = express(); 

var path = require("path"); 
var bodyParser = require('body-parser'); 

var bcrypt = require('bcrypt'); 
var bcryptSaltRounds = 10; 
var jwt = require('jsonwebtoken'); 
var cors = require('cors'); 

app.set('superSecret', config.secret); 

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

app.use(express.static('public')); 
app.options('*', cors()); 
app.use(cors()); 

app.use(express.static(path.join(__dirname, 'public'))); 

ここでは、サーバーのルートである:ここで

app.post('/auth', function (req, res, next) { 
    var username = req.body.username; 
    var password = req.body.password; 

    User.findOne({ 
     where: { username: username} 
    }).then(function (user) { 
     if(user){ 
      bcrypt.compare(password, user.password).then(function (passcheck) { 
       if(passcheck){ 
        var jwtUser = { 
         username: user.username, 
         firstname: user.firstname, 
         lastname: user.lastname, 
         acceslevel: "all" 
        }; 

        //var mysuperSecretPwd = app.get('superSecret'); 

        var token = jwt.sign(jwtUser, app.get('superSecret'), { 
         expiresIn: 1 // expires in 24 hours 
        }); 

        res.json({ 
         success: true, 
         message: 'Theres your key', 
         token: token 
        }); 
       }else{ 
        res.status(401).json({ 
         success: false, 
         message: 'Authentification failed. Password or User wrong' 
        }); 

       } 
      }); 
     }else{ 
      res.status(401).json({ 
       success: false, 
       message: 'Authentification failed' 
      }); 
     } 
    }).catch(next); 
}); 

は、Ajaxリクエストです:

$('#btnRegister').click(function() { 

     var firstname = $('#txtFirstnameRegister').val(); 
     var lastname = $('#txtLastnameRegister').val(); 
     var username = $('#txtUsernameRegister').val(); 
     var password = $('#txtPasswordRegister').val(); 

     if(firstname == "" || lastname == "" || username == "" || password == ""){ 
      msg ="Please fill the fields."; 
      showInfo(msg); 
     }else{ 
      $('#msgInsteadOfAlert').hide(300); 

      var userObject = { 
       firstname: firstname, 
       lastname: lastname, 
       username: username, 
       password: password 
      }; 

      $.ajax({ 
       method: post, 
       url: baseUrl + postUser, 
       data: userObject, 
       success: function() { 
        //TODO: CHECK RESPOND IF USER EXISTS 
        var msg = "User: " + username + " successfully added."; 
        showInfo(msg); 
       }, 
       error: function (xhr, status, errorThrown) { 
        showErrorMessage(xhr, status, errorThrown); 
       } 
      }); 
     } 
    }); 

はアドバンにありがとうce。

+3

コードの写真を投稿して質問に含めないでください。 –

+1

'console.log'ging' req.body'を試してみましたか? – Aron

+1

とPOSTリクエストをどのように送信していますか?多分あなたのHTML/javascriptも投稿してください – Aron

答えて

0

あなたは、文字列POSTとしてあなたのAjaxのメソッドを宣言する必要があります。

$('#btnRegister').click(function() { 
    var firstname = $('#txtFirstnameRegister').val(); 
    var lastname = $('#txtLastnameRegister').val(); 
    var username = $('#txtUsernameRegister').val(); 
    var password = $('#txtPasswordRegister').val(); 

    if (firstname == "" || lastname == "" || username == "" || password == "") { 
    msg ="Please fill the fields."; 
    showInfo(msg); 
    } else { 
    $('#msgInsteadOfAlert').hide(300); 

    var userObject = { 
     firstname: firstname, 
     lastname: lastname, 
     username: username, 
     password: password 
    }; 

    $.ajax({ 
     method: "POST", 
     url: baseUrl + postUser, 
     data: userObject, 
     success: function() { 
     //TODO: CHECK RESPOND IF USER EXISTS 
     var msg = "User: " + username + " successfully added."; 
     showInfo(msg); 
     }, 
     error: function (xhr, status, errorThrown) { 
     showErrorMessage(xhr, status, errorThrown); 
     } 
    }); 
    } 
}); 
+1

ありがとう、私はdataTypeとcontentTypeを削除し、メソッドを追加しました:POSTと今の作業:D – pache

+0

@Apacheluicner - [この回答](http://stackoverflow.com/a/2722770/238884)は照らしているかもしれません。 – Malvolio

+0

@Malvolioありがとうございました – pache

0

おそらく問題はポストのボディははJSONとしてを宣言されていないということです。次のように試してみてください:

 $.ajax({ 
      method: "POST", 
      url: baseUrl + postUser, 
      data: userObject, 
      contentType: "application/json", 
      success: function() { 
     ... 
関連する問題