Я пытаюсь создать приложение для входа в систему. Так что в основном мне нужно настраиваемое сообщение об ошибке на Front End, например -: Когда я хочу зарегистрироваться с электронной почты, которая уже используется, и когда я ввожу пароль, длина которого меньше 6.
Итак, я настроил файл app. js серверной части express для возврата объекта json при ошибке.
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var cors = require('cors');
var helmet = require('helmet');
var compression = require('compression');
var rateLimit = require('express-rate-limit');
var { body, check } = require('express-validator');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(cors());
app.use(compression())
app.use(helmet())
app.use('/', indexRouter);
app.use('/users', usersRouter);
//Security
const limiter = rateLimit({
windowMs: 1 * 60 * 1000, // 1 minute
max: 5, // 5 requests,
});
app.use(limiter);
app.use(function () {
res.setHeader("Pragma", "no-cache");
res.setHeader("Expires", "0");
});
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var error = new Error('404 Page Not Found');
error.status = 404;
next(error);
});
// error handler
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.json({
message: err.message,
error: req.app.get('env') === 'development' ? err : {}
});
});
module.exports = app;
Теперь index. js файл маршрутизатора, на котором я создал ошибки: -
var express = require('express');
var router = express.Router();
var jwt = require('jsonwebtoken');
const { Pool, Client } = require('pg');
var port = process.env.USER || 3000;
var pool = require('../db');
/* GET home page. */
router.get('/', function (req, res) {
res.render('index', { title: 'Welcome to the Server of Imager' });
});
//Registering User
function validateUser(user) {
const validEmail = typeof user.email == 'string' &&
user.email.trim() != '';
const validPassword = typeof user.password == 'string' &&
user.password.trim() != '' &&
user.password.trim().length >= 6;
return validEmail && validPassword;
}
router.post('/register', async (req, res) => {
console.log('Register Pushed');
var newUser = {name: req.body.name, dob: req.body.dob, email: req.body.email, password: req.body.password};
if (validateUser(newUser)) {
console.log('User has valid Credentials');
try {
await pool.query(
'INSERT INTO auth (name, dob, email, password) VALUES ($1, $2, $3, crypt($4, gen_salt(\'bf\')))',
[newUser.name, newUser.dob, newUser.email, newUser.password]
)
console.log('Login Created by ' + newUser.name);
res.status(201).json({message: 'Login Created by ' + newUser.name});
} catch (e) {
res.status(409).json({error: 'Duplicate Credentials is Already Present in the Database'});
console.log('Duplicate Credential(s) present in Database');
}
}
else {
console.log('Invalid Email Or Password');
res.status(500).json({error: 'Invalid Email or Password'});
}
res.end();
});
// Loggin In the User
router.post('/login', async (req, res) => {
var user = {email: req.body.email, password: req.body.password};
if (validateUser(user)) {
results = await pool.query(
'SELECT * FROM auth WHERE email = ($1) AND password = crypt(($2), password)',
[user.email, user.password],
)
console.log(results.rows[0]);
if (results.rows.length >= 1) {
res.status(201).json({greeting: results.rows[0].name});
} else {
res.status(401).json({error: 'User Not Found'});
}
}
else {
res.status(500).json({error: 'Invalid Credentials'});
}
// res.end();
}
);
module.exports = router;
** Но когда я пытаюсь войти или зарегистрироваться с паролем меньше 6, то ответ что я получаю в браузере, это ошибка без какого-либо пользовательского текста ошибки или чего-то еще.
при ответе на вход я получаю это вместо пользовательской ошибки (при вводе неправильного пароля на странице входа в систему)
Я пробовал response.data. {Params}, но бэкэнд все равно ничего не передает, пока res.status не станет 201. ** (я не хочу использовать express -validator)
FrontEnd Code для входа в систему: -
goHome() {
this.$router.push( {
path: '/home'
} );
},
goRegister() {
this.$router.push( {
path: '/register'
} );
},
login() {
this.axios.post( 'http://localhost:3000/login', {
email: this.email,
password: this.password
} )
.then(
( response ) => {
alert( response.data.greeting );
console.log( response );
this.goHome();
// response.data.message
return response.body;
},
( response ) => {
console.log( response );
return response.body;
// alert( 'User Not Found' );
}
)
// .then( data => {
// console.log( data );
// } )
}
>Register Front End Part
goLogin() {
this.$router.push( {
path: '/',
} );
},
register() {
this.axios.post( 'http://localhost:3000/register', {
name: this.name,
dob: this.dob,
email: this.email,
password: this.password
} )
.then(
response => {
console.log( response );
this.goLogin();
},
response => {
console.log( response.body );
console.log( response.header );
console.log( response );
}
)
}