最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

尝试登录到express和node.js中构建的身份验证系统时出现404 ERROR(找不到文件)

IT培训 admin 5浏览 0评论

尝试登录到express和node.js中构建的身份验证系统时出现404 ERROR(找不到文件)

我正在制作一个支持用户注册并使用express.js和node.js登录的演示银行应用程序。当通过邮递员调用时,api构建接受对/signup/authenticate路由的POST请求,但是当在登录表单上通过/authenticate调用时,$.ajax路由给出404错误。

这是index.html中的jQuery ajax请求

$.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);
        }
      })

server.js这是服务器文件

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

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

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

这是路由完成的app.js

'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;

/signup的POST请求有效但/authenticate在使用Ajax时出现404错误。但是当使用Postman时,/authenticate按预期工作。

这是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 {
        userparePasswords(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 / authenticate 404 5.092 ms - 47

执行(默认):SELECT idusernamepasswordrolecreatedAtupdatedAt FROM users AS user WHERE user.username ='sipho'LIMIT 1;

POST / api / authenticate 200 519.020 ms - 193

我尝试了一切。请帮助,因为我对node和Express非常新。

回答如下:

当路径与任何人声明不匹配时,Express会自动响应404。但在你的情况下,我认为是正确的。至于你在几个地方返回404代码,我检查错误的方式是这样的:

  • 确保执行正在您的方法中输入的日志
  • 编写不同的日志/控制台以了解返回的404。或者您可以在每个地方返回不同的http代码,以便找到哪一个失败
  • 之后,您必须检查为什么进入该条件并尝试找到错误的起源。

例如。如果返回的404是第一个,可能是因为在ajax部分你没有发送用户名或密码。如果是第二个,可能是因为用户名未在您的数据库中注册或保存。

希望能帮助到你

尝试登录到express和node.js中构建的身份验证系统时出现404 ERROR(找不到文件)

我正在制作一个支持用户注册并使用express.js和node.js登录的演示银行应用程序。当通过邮递员调用时,api构建接受对/signup/authenticate路由的POST请求,但是当在登录表单上通过/authenticate调用时,$.ajax路由给出404错误。

这是index.html中的jQuery ajax请求

$.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);
        }
      })

server.js这是服务器文件

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

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

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

这是路由完成的app.js

'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;

/signup的POST请求有效但/authenticate在使用Ajax时出现404错误。但是当使用Postman时,/authenticate按预期工作。

这是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 {
        userparePasswords(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 / authenticate 404 5.092 ms - 47

执行(默认):SELECT idusernamepasswordrolecreatedAtupdatedAt FROM users AS user WHERE user.username ='sipho'LIMIT 1;

POST / api / authenticate 200 519.020 ms - 193

我尝试了一切。请帮助,因为我对node和Express非常新。

回答如下:

当路径与任何人声明不匹配时,Express会自动响应404。但在你的情况下,我认为是正确的。至于你在几个地方返回404代码,我检查错误的方式是这样的:

  • 确保执行正在您的方法中输入的日志
  • 编写不同的日志/控制台以了解返回的404。或者您可以在每个地方返回不同的http代码,以便找到哪一个失败
  • 之后,您必须检查为什么进入该条件并尝试找到错误的起源。

例如。如果返回的404是第一个,可能是因为在ajax部分你没有发送用户名或密码。如果是第二个,可能是因为用户名未在您的数据库中注册或保存。

希望能帮助到你

发布评论

评论列表 (0)

  1. 暂无评论