Grazie surfenet per l'attenzione
Sicuramente ho usato una forma impropria nella descrizione del problema.
nel middleware che effettua una verifica dei dati inseriti a form esegue il doppio controllo sulle credenziali inserite effettuando prima una lettura per verificare se esistono già username presenti sulla tabella e poi per email.
il codice è il seguente:
checkDuplicateUsernameOrEmail = (req, res, next) => {
console.log('checkDuplicateUsernameOrEmail - inizio');
// Username
User.findOne({
where: {
username: req.body.username
}
}).then (user => {
if (user) {
res.status(400).send({
message: "Errore! Username già utilizzata - Inserimento non possibile"
});
return;
}
// Email
User.findOne({
where: {
email: req.body.email
}
}).then(user => {
if (user) {
res.status(400).send({
message: "Errore! email già utilizzata - Inserimento non possibile"
});
return;
}
next();
});
});
};
checkEmailandpassword = (req, res, next) => {
console.log('checkEmailandpassword - inizio');
// Email
User.findOne({
where: {
email: req.body.email
}
}).then(user => {
if (!user) {
res.status(400).send({
message: "Errore! email inesistente - cambio password non possibile"
});
return;
}
next();
});
};
console.log('checkDuplicateUsernameOrEmail - fine - controlli ok');
const verifySignUp = {
checkDuplicateUsernameOrEmail: checkDuplicateUsernameOrEmail,
checkEmailandpassword: checkEmailandpassword
};
module.exports = verifySignUp;
quindo faccio l'affermazione "Select Errata che viene creata da Mysql" mi riferisco al fatto che viene effettuata la select sul record con where prima con username e poi con email senza impostare il costrutto "select * from users where ...." ma bensi
utilizzando il formalismo
User.findOne({
where: {
username: req.body.username
}
quindi User.findOne "genera" il codice sql
sql: "SELECT `id`, `cognome`, `nome`, `id_stato` AS `idStato`, `username`, `password`, `email`, `id_ruolo` AS `idRuolo`, `id_ruolo__day` AS `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `users` AS `users` WHERE `users`.`username` = 'misonsan' LIMIT 1;",
in cui viene evidenziato l'errore 1054
code: 'ER_BAD_FIELD_ERROR',
errno: 1054,
sqlState: '42S22',
sqlMessage: "Unknown column 'id_stato' in 'field list'",
sql: "SELECT `id`, `cognome`, `nome`, `id_stato` AS `idStato`, `username`, `password`, `email`, `id_ruolo` AS `idRuolo`, `id_ruolo__day` AS `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `users` AS `users` WHERE `users`.`username` = 'misonsan' LIMIT 1;",
parameters: undefined
},
original: Error: Unknown column 'id_stato' in 'field list'
in cui viene creato in maniera errata un campo `id_stato` AS `idStato` in cui id_stato NON ESITE da nessuna parte, ma lui lo crea lo stesso.
ecco a cosa mi riferivo quando ho scritto "Select Errata che viene creata da Mysql"
la strsql che dovrebbe essere correttamente eseguita dovrebbe essere
"SELECT `id`, `cognome`, `nome`, `idStato`, `username`, `password`, `email`, `idRuolo`, `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt`
FROM `users` AS `users`
WHERE `users`.`username` = 'pincopallo' LIMIT 1;",
mentre genera questa stringa sql errata
"SELECT `id`, `cognome`, `nome`, `id_stato` AS `idStato`, `username`, `password`, `email`, `id_ruolo` AS `idRuolo`, `id_ruolo__day` AS `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt`
FROM `users` AS `users`
WHERE `users`.`username` = 'misonsan' LIMIT 1;",
il problema sta nella scrittura per i campi idStato, idRuolo e idRuolo_Day della forma errata
`id_stato` AS `idStato`, `id_ruolo` AS `idRuolo`, `id_ruolo__day` AS `idRuolo_Day`
anziche
`idStato`, `idRuolo`, `idRuolo_Day`
Spero di aver chiarito meglio il senso del problema.
I campi `idStato`, `idRuolo`, `idRuolo_Day` sono i campi foreign key con le tabelle correlate.
grazie
Moreno