尝试登录到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
id
,username
,password
,role
,createdAt
,updatedAt
FROMusers
ASuser
WHEREuser
.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
id
,username
,password
,role
,createdAt
,updatedAt
FROMusers
ASuser
WHEREuser
.username
='sipho'LIMIT 1;POST / api / authenticate 200 519.020 ms - 193
我尝试了一切。请帮助,因为我对node和Express非常新。
回答如下:当路径与任何人声明不匹配时,Express会自动响应404。但在你的情况下,我认为是正确的。至于你在几个地方返回404代码,我检查错误的方式是这样的:
- 确保执行正在您的方法中输入的日志
- 编写不同的日志/控制台以了解返回的404。或者您可以在每个地方返回不同的http代码,以便找到哪一个失败
- 之后,您必须检查为什么进入该条件并尝试找到错误的起源。
例如。如果返回的404是第一个,可能是因为在ajax部分你没有发送用户名或密码。如果是第二个,可能是因为用户名未在您的数据库中注册或保存。
希望能帮助到你