Je suis un novice total de node.js.

Mon problème est que le fichier html «index.html» appelé «localhost: 5000» ne semble pas charger le fichier javascript «test.js».

Je lance le serveur par

Nodejs server.js

À partir d'une coquille. Les fichiers sont

Server.js:

var http = require('http');
const process = require('process'); 
var fs = require('fs');

var server = http.createServer(function (request, response) {

    if (request.url === "/") {
        fs.readFile("index.html", function (error, pgResp) {
            if (error) {
                response.writeHead(404);
                response.write('Page is not found');
            } else {
                response.writeHead(200, { 'Content-Type': 'text/html' });
                response.write(pgResp);
            }

            response.end();
        });
    } else {
        response.writeHead(200, { 'Content-Type': 'text/html' });
        response.write('<h1>Default Content</h1>');
        response.end();
    }});
server.listen(5000);
console.log('Server is listening on 5000');
console.log(process.cwd())

Le chemin process.cwd () est le chemin des trois fichiers server.js, index.html et test.js

Index.html:

<html>
<body>
    <center>
    <h2>Testing NodeJS Application </h2>
    <p> This is my first web application using NodeJS </p>
    </center>
    <script  type="text/javascript"  src="test.js"></script>
    <script>
      alert('Even this is a Test!');
    </script>
</body>
</html>

Et test.js:

alert('I am here!');

L'alerte dans index.html est affichée, l'alerte dans test.js ne l'est pas.

J'utilise ubuntu 18.04.

Merci d'avance

Peter

0
Peter Plex 25 févr. 2021 à 00:02

2 réponses

Meilleure réponse

Le problème est la façon dont vous importez le script test.js dans votre fichier HTML:

    <script  type="text/javascript"  src="test.js"></script>

Ce fichier est en cours de chargement dans votre navigateur, mais la route fournie dans src= ne peut pas être résolue car "test.js" n'est pas une URL valide ou une route vers le fichier à partir duquel vous pouvez le charger.

Vous devez d'abord définir où allez-vous exposer votre fichier "test.js", afin qu'il puisse être extrait de votre navigateur, puis corriger la valeur de src= en l'URL réelle.

Par exemple, une pratique courante consiste à exposer des fichiers publics dans un dossier /public/ dans votre code serveur, puis à exposer les fichiers là-dedans lorsque l'URL correspond à ce modèle /public/**some-file.js.

Dans votre code, vous pouvez y parvenir en faisant:

//...
var path = require('path');

var server = http.createServer(function (request, response) {

    if (request.url.startsWith("/public/")) {
        fs.readFile(path.join(__dirname, path.normalize(req.url)), function (err,data) {
          if (err) {
            res.writeHead(404);
            res.end(JSON.stringify(err));            
            return;
          }
        res.writeHead(200);
        res.end(data);
      });

      return;
    }

    if (request.url === "/") {
       // ...      
    } else {
       // ...
    }});

//... rest of your code

Vous pouvez trouver plus de détails dans ce guide: Comment faire diffuser des fichiers statiques.

0
tmilar 24 févr. 2021 à 21:40

C'est le dernier code que j'utilise. J'ai placé le fichier javascript test.js dans un dossier nommé public.

var path = require('path');
var http = require('http');
var static = require('node-static');
const process = require('process'); 
var fs = require('fs');


var server = http.createServer(function (request, response) {

    if (request.url.startsWith("/public/")) {
        fs.readFile(path.join(__dirname, path.normalize(request.url)), function (err,data) {
          if (err) {
            response.writeHead(404);
            response.end(JSON.stringify(err));            
            return;
          }
        response.writeHead(200);
        response.end(data);
      });

      return;
    }

    if (request.url === "/") {
        fs.readFile("index.html", function (error, pgResp) {
            if (error) {
                response.writeHead(404);
                response.write('Page is not found');
            } else {
                response.writeHead(200, { 'Content-Type': 'text/html' });
                response.write(pgResp);
            }

            response.end();
        });
    } else {

        response.writeHead(200, { 'Content-Type': 'text/html' });
        response.write('<h1>Default Content</h1>');
        response.end();
    }
});

server.listen(5000);

console.log('Server is listening on 5000');
console.log(process.cwd())

Merci beaucoup!!!!

0
Peter Plex 24 févr. 2021 à 22:29