2017-12-28 17 views
1

私は、ユーザー登録をサポートするデモ銀行アプリケーションを作成しており、express.jsとnode.js ビルドされたapiは、Postman経由で呼び出されたときに/signup/authenticate経路にPOST要求を受け付けますが、ログインフォームの$.ajaxによって呼び出されたときに/authenticate経路に404エラーが発生します。expressとnode.jsに組み込まれている認証システムにログオンしようとすると、ERROR(ファイルが見つかりません)と表示されます

この本server.jsのindex.html

$.ajax({ 
     url: '/authenticate', 
     method: 'POST', 
     data: cred, 
     dataType: 'json', 
     processData: false, 
     contentType: false, 
     success: function(success){ 
      console.log(success); 
     }, 
     error: function(err){ 
      console.log(err); 
     } 
     }) 

でjQueryのAJAXリクエストがサーバファイル

app.use(express.static(__dirname + '/../public')); 

app.get('/', function (req, res) { 
    res.sendFile(path.join(__dirname + '/../public/index.html')); 
}); 

app.use('/api', api(passport)); 

である。これは、ルーティングが

'use strict'; 

var router = require('express').Router(); 

var config = require('../config'), 
    allowOnly = require('../services/routesHelper').allowOnly, 
    AuthController = require('../controllers/authController'), 
    UserController = require('../controllers/userController'), 
    AdminController = require('../controllers/adminController'); 

var APIRoutes = function(passport) { 
    // POST Routes. 
    router.post('/signup', AuthController.signUp); 
    router.post('/authenticate', AuthController.authenticateUser); 

    // GET Routes. 
    router.get('/profile', passport.authenticate('jwt', { session: false }), allowOnly(config.accessLevels.user, UserController.index)); 
    router.get('/admin', passport.authenticate('jwt', { session: false }), allowOnly(config.accessLevels.admin, AdminController.index)); 

    return router; 
}; 

module.exports = APIRoutes; 
に行われapp.jsあります

/signupへのPOST要求は機能しますが、/authenticateはAjaxを使用すると404エラーが発生します。しかし、/authenticateはPostmanを使用するときには正常に動作します。

これはauthController.js

var jwt = require('jsonwebtoken'); 

var config = require('../config'), 
    db = require('../services/database'), 
    User = require('../models/user'); 

// The authentication controller. 
var AuthController = {}; 

// Register a user. 
AuthController.signUp = function(req, res) { 
    if(!req.body.username || !req.body.password) { 
     res.json({ message: 'Please provide a username and a password.' }); 
    } else { 
     db.sync().then(function() { 
      var newUser = { 
       username: req.body.username, 
       password: req.body.password 
      }; 

      return User.create(newUser).then(function() { 
       res.status(201).json({ message: 'Account created!' }); 
      }); 
     }).catch(function(error) { 
      console.log(error); 
      res.status(403).json({ message: 'Username already exists!' }); 
     }); 
    } 
} 

// Authenticate a user. 
AuthController.authenticateUser = function (req, res) { 
    if (!req.body.username || !req.body.password) { 
    res.status(404).json({ 
     message: 'Username and password are needed!' 
    }); 
    } else { 
    var username = req.body.username, 
     password = req.body.password, 
     potentialUser = { 
     where: { 
      username: username 
     } 
     }; 

    User.findOne(potentialUser).then(function (user) { 
     if (!user) { 
     res.status(404).json({ 
      message: 'Authentication failed!' 
     }); 
     } else { 
     user.comparePasswords(password, function (error, isMatch) { 
      if (isMatch && !error) { 
      var token = jwt.sign({ 
       username: user.username 
       }, 
       config.keys.secret, { 
       expiresIn: '30m' 
       } 
      ); 

      res.json({ 
       success: true, 
       token: 'JWT ' + token, 
       role: user.role 
      }); 
      } else { 
      console.log("Log err") 
      res.status(404).json({ 
       message: 'Login failed!' 
      }); 
      } 
     }); 
     } 
    }).catch(function (error) { 
     res.status(500).json({ 
     message: 'There was an error!' 
     }); 
    }) 
    } 
} 


module.exports = AuthController; 

です。ここ応答のログがあります。

POST/API/404 5.092 MSを認証 -

47が実行する(デフォルト):user user AS idusernamepasswordrolecreatedAtupdatedAtusersから選択できます。 username = 'sipho' LIMIT 1;

POST/API/200 519.020 msの認証 - 193

を私はすべてを試してみました。私は非常にノードとエクスプレスに新しいですので、助けてください。

答えて

0

パスが一致しない場合は、自動的に応答します(404)。しかし、あなたの場合は、私は正しく宣言されていると思います。 限りあなたはいくつかの場所で404コードを返すされているように、私はエラーをチェックしたい方法は、このようになります:

  • 実行があなたの方法で

  • 書き込みに入っているログで確認してくださいどの404が返されているかを知るために異なるログ/コンソール。または、どこに失敗しているのかを見つけるために、すべての場所で異なるhttpコードを返すことができます。

  • その後、その条件を入力してエラーの原因を調べる必要があります。

たとえば、返された404が最初のものである場合、ajaxの部分でユーザー名またはパスワードを送信していない可能性があります。 2番目の場合は、ユーザー名が登録されていないか、データベースに保存されていない可能性があります。

希望します。

+0

ありがとうございました。どうやら、404エラーが返されていて、メッセージオブジェクトは返されませんでした。 'console.log'文をどこにでも振りかざし、問題の根本をたどることができました。アドバイスをありがとう – hunkpapa

関連する問題