Я создаю остальные API, используя nodejs, mongodb и express. И в каждом успешном ответе и ответе об ошибке я отправляю эти ответы в произвольном формате. Но этот формат повторяется, и в каждом случае, если еще и попробуйте блок перехвата, я повторяю это снова и снова, и контроллер становится шумным и нечитаемым.
Я хочу отделить / извлечь эту логику c где-то в центре, как в будущем, если мне нужно будет внести какие-либо изменения в этот формат, мне не нужно вносить изменения в нескольких местах. Ниже приведена функция входа в систему.
** Контроллер аутентификации - **
var api_var = {
version: process.env.API_VERSION,
developer: process.env.API_DEVELOPER
};
exports.login = async (req, res) => {
var response_status = {};
var response_dataset = {};
var response_data = {};
const errors = validationResult(req);
try {
if (!errors.isEmpty()) {
const errorVal = errors.array();
response_dataset = errors.array();
response_status.message = errorVal[0].msg;
response_data.dataset = response_dataset;
(response_data.status = response_status), (response_data.publish = api_var);
res.status(process.env.HTTP_RESPONSE_BAD_REQUEST);
res.send({ response: response_data });
} else {
let { email, password } = req.body;
let user = await User.findOne({ email });
if(!user){
response_status.message = "There is no user associated with this email address!";
response_data.dataset = response_dataset;
(response_data.status = response_status),
(response_data.publish = api_var);
res.status(process.env.HTTP_RESPONSE_UNAUTHORIZED);
res.send({ response: response_data });
} else if (user.status == 'inactive'){
response_status.message = "Your Account is either disabled or removed!";
response_data.dataset = response_dataset;
(response_data.status = response_status),
(response_data.publish = api_var);
res.status(process.env.HTTP_RESPONSE_UNAUTHORIZED);
res.send({ response: response_data });
} else if(!global.Helpers.comparePassword(password, user.password)){
response_status.message = "The password is invalid or the user does not have a password!";
response_data.dataset = response_dataset;
(response_data.status = response_status),
(response_data.publish = api_var);
res.status(process.env.HTTP_RESPONSE_UNAUTHORIZED);
res.send({ response: response_data });
}else if(user.isVerified == false){
response_status.message = "Your Account is not varified. Please verify your Account!";
response_data.dataset = response_dataset;
(response_data.status = response_status),
(response_data.publish = api_var);
res.status(process.env.HTTP_RESPONSE_UNAUTHORIZED);
res.send({ response: response_data });
} else {
let userDetails = {
id: user._id,
email: user.email,
name: user.name,
role: user.role
};
let Token = global.Helpers.createToken(userDetails);
user_details = {
token : Token,
user : {
role: user.role,
name: user.name,
email: user.email,
_id: user._id
}
}
response_status.message = "Well Done, You Successfully Logged In to pawsticks!";
response_data.dataset = user_details;
(response_data.status = response_status),
(response_data.publish = api_var);
res.status(process.env.HTTP_RESPONSE_OK);
res.send({ response: response_data });
}
}
} catch (error) {
response_dataset = error;
response_status.message = error.message;
response_data.dataset = response_dataset;
(response_data.status = response_status), (response_data.publish = api_var);
res.status(process.env.HTTP_RESPONSE_INTERNAL_SERVER_ERROR);
res.send({ response: response_data });
}
}
В моей текущей реализации объекты api_var и response_status, response_dataset, response_data являются повторяющимися. Как я могу быть в состоянии убрать этот беспорядок.