Grazie anticipatamente a chi cerca di darmi una mano.
Ho sviluppato per una onlus locale una web application SPA utilizzando i seguenti framework
- Frontend: Angular
- Backend: nodejs
- Database: Mysql
Sono in fase avanzata di sviluppo e stavo pensando di mettere in test l'applicazione. Mi sono creato una VPS su AWS utilizzando un server ubuntu 22.04. Nell'istanza ho creato in /var/www/ una cartella yellowFlag che deve contenere il codice della mia applicazione sia per la parte backend che della parte frontend. La cartella YellowFlag ha due sottocartelle rispettivamente “frontend” per contenere la build e “backend” per contenere i sorgenti della parte backend che ho sviluppato in Visual Studio Code.
Ho effettuato la build su Visual Studio Code della parte Frontend e ho copiato con filezilla il contenuto della cartella “frontend”
Ho copiato sempre con filezilla i sorgenti sulla catella “backend”
Spero di aver spiegato, la struttura dei miei dati sull'istanza AWS
premetto che ho effettuato nella creazione dell'istanza tutti i passi di configurazione e precisamente
- Installazione mysql e phpmyadmin
- creazione nginx
' creazione server Blocks
il frontend ha il seguente url: https://bandieragialla.ghisellinimoreno.it
il backend ha il seguente url: https://api,ghisellinimoreno.it
su visual studio code, lato frontend ho definito environment.ts
export const environment = {
production: false,
APIURL: 'https://api.ghisellinimoreno.it',
APIAUTURL: 'https://api.ghisellinimoreno.it/api/auth/',
IMGURL: 'https://api.ghisellinimoreno.it/storage/posts/'
};
in backend ho definito la index.js nel seguente modo;
const express = require('express');
const bodyparser = require('body-parser');
const cors = require('cors');
const mysql = require('mysql2');
// porta per mysql
const ports = process.env.PORT || 3001;
global.__basedir = __dirname;
// importo la connessione al db
const db = require('./db');
// --------------------------------------------------- importo le rotte
const authRouter = require('./routers/api/auth');
const userRouter = require('./routers/user');
const userlevelRouter = require('./routers/userlevels');
const socioRouter = require('./routers/socio');
const tesseramentoRouter = require('./routers/tesseramento');
const bandieragiallaRouter = require('./routers/bandieragialla');
const localitaRouter = require('./routers/t-locali');
const sociosearchRouter = require('./routers/sociosearch');
const adesioneconfirmRouter = require('./routers/adesioneConfirm');
const quotatesseraRouter = require('./routers/quotatessera');
const manifRouter = require('./routers/manifestaziones');
const eventoRouter = require('./routers/eventos');
const tipobigliettoRouter = require('./routers/t_tipobigliettos');
const logisticaRouter = require('./routers/logisticas');
const logsettoreRouter = require('./routers/logsettores');
const logfilaRouter = require('./routers/logfilas');
const logfilapostiRouter = require('./routers/logfilapostis');
const eventosettfilapostiRouter = require('./routers/eventosettfilapostis');
const eventopostoRouter = require('./routers/eventopostos');
const eventofilaRouter = require('./routers/eventofilas');
const messageRouter = require('./routers/messages');
const prenoteventoNConfirmRouter = require('./routers/prenoteventoNConfirm');
const prenotazeventoRouter = require('./routers/prenotazevento');
const bigliettoRouter = require('./routers/biglietto');
const prenotazeventomasterConfirmRouter = require('./routers/prenotazeventomasterConfirm');
const cassaRouter = require('./routers/cassa');
const cassamovRouter = require('./routers/cassamov');
const regconfRouter = require('./routers/registerConfirm');
const locandinaRouter = require('./routers/locandina');
const wprenotazeventoRouter = require('./routers/wprenotazevento');
const wprenotazeventomasterRouter = require('./routers/wprenotazeventomaster');
const logpostoRouter = require('./routers/logposto');
const wfileRouter = require('./routers/wfile');
const wsettoriRouter = require('./routers/wsettori');
const workFilaRouter = require('./routers/workFila');
const workSettoreRouter = require('./routers/workSettore');
const eventosettorexxRouter = require('./routers/eventosettore');
// --------------------------------------------------- importo le rotte -- tabelle correlate
const ruoloRouter = require('./routers/t-ruolos');
const statouserRouter = require('./routers/t_stato_utentes');
const statomanifRouter = require('./routers/t_stato_manifestaziones')
const statoeventoRouter = require('./routers/t_stato_eventos')
const tagliabigliettoRouter = require('./routers/t_taglia_bigliettos')
const statotagliabigliettoRouter = require('./routers/t_stato_taglia_bigliettos')
const statologisticaRouter = require('./routers/t_stato_logisticas')
const tipologisticaRouter = require('./routers/t_tipo_logisticas')
const statobigliettoRouter = require('./routers/t_stato_bigliettos')
const tipopagamentoRouter = require('./routers/t_tipo_pagamentos')
const wEventoTagliaBigliettoRouter = require('./routers/wEventoTagliaBiglietto')
const comunicatoRouter = require('./routers/comunicato')
// work
const elementoRouter = require('./routers/elementos')
// per upload images
const imageRouter = require('./routers/images');
// per il deploy su heroku o altro hosting 2022/04/06
var corsOptions = {
// origin: "https://bandieragialla.ghisellinimoreno.it",
allowedHeaders: ['sessionId', 'Content-Type', 'Authorization'],
exposedHeaders: ['sessionId'],
origin: '*',
methods: ['GET','POST','DELETE','PUT','PATCH'],
preflightContinue: false
};
const app = express();
// utilizzo i pacchetti
app.use(cors(corsOptions));
app.use(bodyparser.json());
app.use(express.json());
// ----------------------------------------- utilizzo il router
app.use('/api/auth', authRouter);
app.use('/users', userRouter);
app.use('/userlevel', userlevelRouter);
app.use('/socio', socioRouter);
app.use('/tesseramento', tesseramentoRouter);
app.use('/bangia', bandieragiallaRouter);
app.use('/tlocalita', localitaRouter);
app.use('/sociosearch', sociosearchRouter);
app.use('/adesioneConfirm', adesioneconfirmRouter);
app.use('/quotatessera', quotatesseraRouter);
app.use('/manif', manifRouter);
app.use('/evento', eventoRouter);
app.use('/ttipobiglietto', tipobigliettoRouter);
app.use('/logistica', logisticaRouter);
app.use('/logsettore', logsettoreRouter);
app.use('/logfila', logfilaRouter);
app.use('/logfilaposti', logfilapostiRouter);
app.use('/eventosettfilaposti', eventosettfilapostiRouter);
app.use('/eventoposto', eventopostoRouter);
app.use('/eventofila', eventofilaRouter);
app.use('/eventosettore', eventosettorexxRouter);
app.use('/message', messageRouter);
app.use('/prenoteventoNConfirm', prenoteventoNConfirmRouter);
app.use('/prenotazevento', prenotazeventoRouter);
app.use('/biglietto', bigliettoRouter);
app.use('/prenotazeventomasterConfirm', prenotazeventomasterConfirmRouter);
app.use('/cassa', cassaRouter);
app.use('/cassamov', cassamovRouter);
app.use('/regconf', regconfRouter);
app.use('/locandina', locandinaRouter);
app.use('/wprenotazevento', wprenotazeventoRouter);
app.use('/logposto', logpostoRouter);
app.use('/wfile', wfileRouter);
app.use('/wsettori', wsettoriRouter);
app.use('/workFila', workFilaRouter);
app.use('/workSettore', workSettoreRouter);
app.use('/weventotagliabiglietto', wEventoTagliaBigliettoRouter);
app.use('/wprenotazeventomaster', wprenotazeventomasterRouter);
app.use('/comunicato', comunicatoRouter);
// tabelle correlate
app.use('/truolo', ruoloRouter);
app.use('/tstatoutente', statouserRouter);
app.use('/tstatomanifestazione', statomanifRouter);
app.use('/tstatoevento', statoeventoRouter);
app.use('/ttagliabiglietto', tagliabigliettoRouter);
app.use('/tstatotagliabiglietto', statotagliabigliettoRouter);
app.use('/tstatologistica', statologisticaRouter);
app.use('/ttipologistica', tipologisticaRouter);
app.use('/tstatobiglietto', statobigliettoRouter);
app.use('/ttipopagamento', tipopagamentoRouter);
// work
app.use('/elemento', elementoRouter);
app.use('/upload', imageRouter);
// ... Va inserito come ultima rotta
app.use(function(req, res, next){
// res.setHeader('Content-Type', 'text/plain');
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
// res.status(404).send('La pagina non esiste amico!');
next();
});
// vecchia modalità
/*
app.listen(3000,() => {
console.log('Server running');
});
*/
// nuova modalità
app.listen(ports,() => {
console.log(`Server sta girando sulla porta ${ports} -- credenziali aws ses per invio email`);
});
console.log('index.js');
ho un problema di cors. Evidenzio la diagnostica
Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da https://api.ghisellinimoreno.it/evento/getbyActive/Act. Motivo: l’header “authorization” non è consentito a causa dell’header “Access-Control-Allow-Headers” nella risposta CORS preliminare (“preflight”).
Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da https://api.ghisellinimoreno.it/evento/getbyActive/Act. Motivo: richiesta CORS non riuscita. Codice di stato: (null).
Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da https://api.ghisellinimoreno.it/tesseramento/gettesserebyAnno/2023. Motivo: l’header “authorization” non è consentito a causa dell’header “Access-Control-Allow-Headers” nella risposta CORS preliminare (“preflight”).
Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da https://api.ghisellinimoreno.it/manif/getActive/active/1. Motivo: l’header “authorization” non è consentito a causa dell’header “Access-Control-Allow-Headers” nella risposta CORS preliminare (“preflight”).
Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da https://api.ghisellinimoreno.it/tesseramento/gettesserebyAnno/2023. Motivo: richiesta CORS non riuscita. Codice di stato: (null).
Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da https://api.ghisellinimoreno.it/manif/getActive/active/1. Motivo: richiesta CORS non riuscita. Codice di stato: (null).
Object { headers: {…}, status: 0, statusText: "Unknown Error", url: "https://api.ghisellinimoreno.it/manif/getActive/active/1", ok: false, name: "HttpErrorResponse", message: "Http failure response for https://api.ghisellinimoreno.it/manif/getActive/active/1: 0 Unknown Error", error: error }
main.js:1:586307
Object { headers: {…}, status: 0, statusText: "Unknown Error", url: "https://api.ghisellinimoreno.it/tesseramento/gettesserebyAnno/2023", ok: false, name: "HttpErrorResponse", message: "Http failure response for https://api.ghisellinimoreno.it/tesseramento/gettesserebyAnno/2023: 0 Unknown Error", error: error }
main.js:1:582289
Object { headers: {…}, status: 0, statusText: "Unknown Error", url: "https://api.ghisellinimoreno.it/evento/getbyActive/Act", ok: false, name: "HttpErrorResponse", message: "Http failure response for https://api.ghisellinimoreno.it/evento/getbyActive/Act: 0 Unknown Error", error: error }
main.js:1:1770277
?
Riuscite a capire come risolvere il problema ?
Ho cercato di spiegare al meglio il problema, ma sono a disposizione per ogni eventuale chiarimento.
Mi scuso se ho sbagliato il forum.
Grazie
Moreno