Non riesco a richiamare un file .js

di il
8 risposte

Non riesco a richiamare un file .js

Salve sto lavorando ad un progetto Universitario che consiste nella creazione di una web app per la prenotazione dei posti nelle aule. Sto utilizzando node.js, mysql, javascript e HTML. Nel pagina di prenotazione ho bisogno di richiamre un file JS ma se ci provo mi da l'errore " GET net::ERR_ABORTED 404 (Not Found)".

Questo è il mio app.js:

/**
* Module dependencies.
*/
var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');
//var methodOverride = require('method-override');
var session = require('express-session');
var app = express();
var mysql      = require('mysql');
var bodyParser=require("body-parser");
var connection = mysql.createConnection({
              host     : 'localhost',
              user     : 'root',
              password : 'root',
              database : 'tesi',
              port     : 3307
                        });

connection.connect(function(err){
    if (err) throw err;
    console.log("Connected!");
});

global.db = connection;

// all environments
app.set('port', process.env.PORT || 8080);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
              secret: 'keyboard cat',
              resave: false,
              saveUninitialized: true,
              cookie: { maxAge: 60000 }
            }))

// development only

app.get('/', routes.index);//call for main index page
app.get('/signup', user.signup);//call for signup page
app.post('/signup', user.signup);//call for signup post
app.get('/login', routes.index);//call for login page
app.post('/login', user.login);//call for login post
app.get('/home/dashboard', user.dashboard);//call for dashboard page after login
app.get('/home/logout', user.logout);//call for logout
app.get('/home/profile',user.profile);//to render users profile
app.get('/home/prenotazione',user.prenotazione);//to render users prenotazione
//Middleware
app.listen(8080)
Mentre questa è linea che crea l'errore:

<%- include('./header.ejs');%>

<script src="callback.js"></script>

<%- include('./footer.ejs');%>
Ovviamente nell'header e nel footer è già presente <head> e <body>.

Qualcuno saprebbe dirmi perchè ho questo errore? e potrebbe darmi una mano a fare questo progetto, perchè oltre a questa cosa non riesco a frne altre. Grazie per la disponibilità.

8 Risposte

  • Re: Non riesco a richiamare un file .js

    Ciao Gianchester, benvenuto nel forum
    Per quanto riguarda il progetto di per sé, noi siamo qui principalmente per dare aiuto dopo che sono state effettuate ricerche e si ha una parte di codice non funzionante, non per la creazione di parti di codice da usare in quel modo.
    Per quanto riguarda questo errore, invece, avrei una domanda: il file "callback.js" si trova nella cartella "public"?
    Perché altrimenti ti consiglierei di spostarlo lì dentro. Se express non lo trova in una cartella indicata per i file statici, proverà a cercare una route con quel nome, ma fra quelle inizializzate non ce n'è una con il nome del file.
  • Re: Non riesco a richiamare un file .js

    andreadev ha scritto:


    Ciao Gianchester, benvenuto nel forum
    Per quanto riguarda il progetto di per sé, noi siamo qui principalmente per dare aiuto dopo che sono state effettuate ricerche e si ha una parte di codice non funzionante, non per la creazione di parti di codice da usare in quel modo.
    Per quanto riguarda questo errore, invece, avrei una domanda: il file "callback.js" si trova nella cartella "public"?
    Perché altrimenti ti consiglierei di spostarlo lì dentro. Se express non lo trova in una cartella indicata per i file statici, proverà a cercare una route con quel nome, ma fra quelle inizializzate non ce n'è una con il nome del file.
    Il file "call back.js" si trova all'interno della stessa cartella del file dove lo richiamo, è un file .ejs. Entrambi i file si trovano all'interno della stessa cartella. Per quello non riesco a capire il problema. Grazie per il benvenuto
  • Re: Non riesco a richiamare un file .js

    Nessuno riesce ad aiutarmi riguardo questo problema?
  • Re: Non riesco a richiamare un file .js

    In un tipico server apache questo metodo funzionerebbe, perché i file vengono referenziati in base alla loro posizione nella cartella. In express, però, non è così semplice. Le richieste vengono passate attraverso il sistema di routing, e non solo quelle delle pagine, ma anche quelle delle immagini e degli script. Per questo motivo nella loro documentazione indicano di inserire gli script che devono essere resi disponibili al browser nella cartella "public" e impostarla come hai fatto nel tuo codice in questa riga:
    
    app.use(express.static(path.join(__dirname, 'public')));
    
    Per chi si affaccia per le prime volte a questo sistema la cosa potrebbe sembrare innaturale, ma è così

    Comunque, da quello che mi hai scritto mi è venuto il dubbio che forse non hai chiaro cosa sta succedendo nel tuo codice. I file .ejs sono un tipo di file che generalmente va utilizzato dal server per preparare ciò che viene poi inviato al browser dell'utente. I browser non hanno il supporto per i file .ejs incluso.

    Nell'ultima sezione del codice (dove dici che ti crea l'errore) tu stai indicando al browser l'esistenza di un file chiamato "callback.js" (oltretutto, non "callback.ejs"). Il browser appena esamina il codice HTML farà una richiesta al server per ricevere questo file, ma il server non sa cosa rispondergli.

    La domanda che dovresti farti è:
    Il file callback.js va eseguito dal browser dell'utente o dal mio server tramite node?

    Nel primo caso, allora risolveresti spostando il file nella cartella public e assicurandoti che non sia un file EJS, ma un semplice file JS.

    Nel secondo caso, dovresti creare una route per quel file, ma probabilmente ha poco senso che il browser lo richiami in un tag "script"...

    Dalle informazioni che hai dato questo è il massimo che ti posso dire, spero possa esserti utile, scrivi comunque se hai ancora domande su come funziona
  • Re: Non riesco a richiamare un file .js

    andreadev ha scritto:


    In un tipico server apache questo metodo funzionerebbe, perché i file vengono referenziati in base alla loro posizione nella cartella. In express, però, non è così semplice. Le richieste vengono passate attraverso il sistema di routing, e non solo quelle delle pagine, ma anche quelle delle immagini e degli script. Per questo motivo nella loro documentazione indicano di inserire gli script che devono essere resi disponibili al browser nella cartella "public" e impostarla come hai fatto nel tuo codice in questa riga:
    
    app.use(express.static(path.join(__dirname, 'public')));
    
    Per chi si affaccia per le prime volte a questo sistema la cosa potrebbe sembrare innaturale, ma è così

    Comunque, da quello che mi hai scritto mi è venuto il dubbio che forse non hai chiaro cosa sta succedendo nel tuo codice. I file .ejs sono un tipo di file che generalmente va utilizzato dal server per preparare ciò che viene poi inviato al browser dell'utente. I browser non hanno il supporto per i file .ejs incluso.

    Nell'ultima sezione del codice (dove dici che ti crea l'errore) tu stai indicando al browser l'esistenza di un file chiamato "callback.js" (oltretutto, non "callback.ejs"). Il browser appena esamina il codice HTML farà una richiesta al server per ricevere questo file, ma il server non sa cosa rispondergli.

    La domanda che dovresti farti è:
    Il file callback.js va eseguito dal browser dell'utente o dal mio server tramite node?

    Nel primo caso, allora risolveresti spostando il file nella cartella public e assicurandoti che non sia un file EJS, ma un semplice file JS.

    Nel secondo caso, dovresti creare una route per quel file, ma probabilmente ha poco senso che il browser lo richiami in un tag "script"...

    Dalle informazioni che hai dato questo è il massimo che ti posso dire, spero possa esserti utile, scrivi comunque se hai ancora domande su come funziona
    Guarda sono nel primo caso ed ho provato a fare come hai detto tu creando una cartella "public" e inserendoci all'interno il file "callback.js" il cui all'interno vi è un semplice " console.log("testo")" per vedere se me lo prendesse. Sono andato su "ispeziona" --> "console" ma continua a darmi lo stesso errore di prima, cioè: "Failed to load resource: the server responded with a status of 404 (Not Found)". Cosa potrebbe essere? Potremmo sentirci a voce su una piattaforma come Skype o Meet ? Grazie per la disponibilità
  • Re: Non riesco a richiamare un file .js

    Ciao Gianchester,
    La console è utile per vedere gli errori del codice javascript, ma hai provato anche a vedere nella sezione "Network" degli strumenti di sviluppatore? Lì hai modo di controllare quali richieste vengono effettuate al server, compreso l'indirizzo effettivo che viene richiesto. Questo ti potrebbe aiutare nell'avere una migliore idea di quello che il browser sta facendo.
    Se l'indirizzo è quello giusto, allora il problema deve risiedere nelle impostazioni del server express. Io tenterei di inserire un'immagine nella cartella "public" e vedere se si riesce a vederla inserendo l'url nel browser (per intenderci, se il server gira su "localhost:5000" e l'immagine si chiama "test.png", io proverei ad aprire chrome e inserire "localhost:5000/test.png" dopo aver spostato l'immagine nella cartella "public").
    Se l'immagine viene visualizzata, allora c'è qualcosa di davvero strano.
    Se l'immagine non viene visualizzata, allora è probabile che la cartella dei file statici non sia stata configurata correttamente per qualche motivo (il codice sembrava ok, ma dipende anche da dove si trova la cartella public).

    Per quanto riguarda incontrarci in privato, mi spiace ma non ho il tempo per farlo. Preferisco risolvere le cose sul forum, al cui ho deciso di dedicare parte del mio tempo, in modo che chi in futuro avrà un problema simile potrà trovare qui la risposta
  • Re: Non riesco a richiamare un file .js

    andreadev ha scritto:


    Ciao Gianchester,
    La console è utile per vedere gli errori del codice javascript, ma hai provato anche a vedere nella sezione "Network" degli strumenti di sviluppatore? Lì hai modo di controllare quali richieste vengono effettuate al server, compreso l'indirizzo effettivo che viene richiesto. Questo ti potrebbe aiutare nell'avere una migliore idea di quello che il browser sta facendo.
    Se l'indirizzo è quello giusto, allora il problema deve risiedere nelle impostazioni del server express. Io tenterei di inserire un'immagine nella cartella "public" e vedere se si riesce a vederla inserendo l'url nel browser (per intenderci, se il server gira su "localhost:5000" e l'immagine si chiama "test.png", io proverei ad aprire chrome e inserire "localhost:5000/test.png" dopo aver spostato l'immagine nella cartella "public").
    Se l'immagine viene visualizzata, allora c'è qualcosa di davvero strano.
    Se l'immagine non viene visualizzata, allora è probabile che la cartella dei file statici non sia stata configurata correttamente per qualche motivo (il codice sembrava ok, ma dipende anche da dove si trova la cartella public).

    Per quanto riguarda incontrarci in privato, mi spiace ma non ho il tempo per farlo. Preferisco risolvere le cose sul forum, al cui ho deciso di dedicare parte del mio tempo, in modo che chi in futuro avrà un problema simile potrà trovare qui la risposta
    Grazie ma sono riuscito a risolvere in altro modo.

    Ho cambiato questa riga:
    app.use(express.static(path.join(__dirname, 'public')));
    In questo modo:
    app.use(express.static("public"));
    Grazie comunque per l'aiuto
  • Re: Non riesco a richiamare un file .js

    Ottimo, allora come accennavo nel messaggio era la cartella dei file statici che non era configurata correttamente, ci saranno stati dei problemi con il valore della variabile "__dirname". Sono felice che sei riuscito a trovare la soluzione, buona giornata!
Devi accedere o registrarti per scrivere nel forum
8 risposte