fs.writefile ne marche pas

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J’ai un fichier server.js :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const express = require('express'); // Inclusion de ExpressJS
const fs = require('fs'); // Inclusion de fs (fs.readfile)
const path = require("path");
const moment = require("moment")
var app = express(); // Utilisé pour app.get/put/delete/post
var port = 9500; // On définit la valeur du port sur 9500
app.set('view engine', 'ejs');

// URL
app.get('/api', function (req, res) {

// On lit le ficher time.json dans TimeBot/json/time.json. Puis, on envoie "timestamp" dans le res.send.



let ts_str = fs.readFileSync('./TimeBot/json/time.json', { encoding: 'utf-8' });
let ts = JSON.parse(ts_str);
let ts_remaining_str = moment(ts.timestamp).fromNow(); 
let msg = "Il reste " + ts_remaining_str + " avant le debut du live.";
res.send(msg);



});

app.get('/', function (req, res){
      res.send("va pas ici, y'a rien. Va plutôt à cette adresse : http://localhost:9500/api");
});


app.get('/', function(req, res) {
  try {
    let ts = fs.readFileSync('./TimeBot/json/time.json', { encoding: 'utf-8' });
    res.render('index', { timestamp: JSON.parse(ts).timestamp });


    moment(1500048000000).fromNow();

  fs.writeFile("C:\\Users\\admin\\Desktop\\addon\\MonAPI\\Extension_Chrome\\popup.html", function(err) {
    res.send(msg);
   });


  } catch (e) { 
    res.send("error");
  }
});





// Port sur lequel est lu le serveur, soit 9500
app.listen(port, function(err){
    if (err) throw err;
    console.log("nickel !");
});

// MOMENTJS  https://momentjs.com/downloads/moment-with-locales.js

Et un fichier popup.html où il n’y à rien dedans.

Aborescence : https://image.noelshack.com/fichiers/2017/28/5/1500040244-capture.png

J’aimerais relier le contenu de mon fichier js à mon fichier html ! Le truc, c’est que j’ai essayé avec la méthode res.sendfile, et plein d’autres méthodes, mais ce fut en vain.

Merci.

+0 -0

utilise ce code pour afficher ton code bien formaté :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
```js
const express = require('express'); // Inclusion de ExpressJS
const fs = require('fs'); // Inclusion de fs (fs.readfile)
const path = require("path");
const moment = require("moment")
var app = express(); // Utilisé pour app.get/put/delete/post
var port = 9500; // On définit la valeur du port sur 9500
app.set('view engine', 'ejs');

// URL
app.get('/api', function (req, res) {

// On lit le ficher time.json dans TimeBot/json/time.json. Puis, on envoie "timestamp" dans le res.send.



let ts_str = fs.readFileSync('./TimeBot/json/time.json', { encoding: 'utf-8' });
let ts = JSON.parse(ts_str);
let ts_remaining_str = moment(ts.timestamp).fromNow(); 
let msg = "Il reste " + ts_remaining_str + " avant le debut du live.";
res.send(msg);



});

app.get('/', function (req, res){
      res.send("va pas ici, y'a rien. Va plutôt à cette adresse : http://localhost:9500/api");
});


app.get('/', function(req, res) {
  try {
    let ts = fs.readFileSync('./TimeBot/json/time.json', { encoding: 'utf-8' });
    res.render('index', { timestamp: JSON.parse(ts).timestamp });


    moment(1500048000000).fromNow();

  fs.writeFile("C:\\Users\\admin\\Desktop\\addon\\MonAPI\\Extension_Chrome\\popup.html", function(err) {
    res.send(msg);
   });


  } catch (e) { 
    res.send("error");
  }
});





// Port sur lequel est lu le serveur, soit 9500
app.listen(port, function(err){
    if (err) throw err;
    console.log("nickel !");
});

// MOMENTJS  https://momentjs.com/downloads/moment-with-locales.js

```

Que veut tu dire par relier le contenu de ton fichier js à ton fichier html ?

+1 -0

Il manque deux retours à la ligne avant le ```js au début de ton code, c’est pourquoi il s’affiche mal.

Si par "relier le contenu de ton fichier js à ton fichier html", tu veux dire appeler le fichier time.js depuis index.html, tu as deux solutions :

  • la moins pratique : créer une route dans laquelle tu appelles simple res.render() ;
  • la plus simple : ranger tous les fichiers statiques (images, scripts, etc.) et utiliser la méthode express.static()
+2 -0

Il manque deux retours à la ligne avant le ```js au début de ton code, c’est pourquoi il s’affiche mal.

Si par "relier le contenu de ton fichier js à ton fichier html", tu veux dire appeler le fichier time.js depuis index.html, tu as deux solutions :

  • la moins pratique : créer une route dans laquelle tu appelles simple res.render() ;
  • la plus simple : ranger tous les fichiers statiques (images, scripts, etc.) et utiliser la méthode express.static()
Jérôme Deuchnord

Non, ce n’est pas ça.

Je veux que mon dossier popup.html ai ce contenu : https://image.noelshack.com/fichiers/2017/28/5/1500046304-capture.png

Il manque deux retours à la ligne avant le ```js au début de ton code, c’est pourquoi il s’affiche mal.

Si par "relier le contenu de ton fichier js à ton fichier html", tu veux dire appeler le fichier time.js depuis index.html, tu as deux solutions :

  • la moins pratique : créer une route dans laquelle tu appelles simple res.render() ;
  • la plus simple : ranger tous les fichiers statiques (images, scripts, etc.) et utiliser la méthode express.static()
Jérôme Deuchnord

Non, ce n’est pas ça.

Je veux que mon dossier popup.html ai ce contenu : https://image.noelshack.com/fichiers/2017/28/5/1500046304-capture.png

Awoken

Pourrais-tu placer tes captures d’écran sur un autre site (voire, pourquoi pas, sur ZdS directement, pour qu’elles restent pérennes) ? Noelshack semble avoir des difficultés, j’ai constamment des erreurs 503 qui m’empêchent d’accéder à tes images

+0 -0

Il manque deux retours à la ligne avant le ```js au début de ton code, c’est pourquoi il s’affiche mal.

Si par "relier le contenu de ton fichier js à ton fichier html", tu veux dire appeler le fichier time.js depuis index.html, tu as deux solutions :

  • la moins pratique : créer une route dans laquelle tu appelles simple res.render() ;
  • la plus simple : ranger tous les fichiers statiques (images, scripts, etc.) et utiliser la méthode express.static()
Jérôme Deuchnord

Non, ce n’est pas ça.

Je veux que mon dossier popup.html ai ce contenu : https://image.noelshack.com/fichiers/2017/28/5/1500046304-capture.png

Awoken

Pourrais-tu placer tes captures d’écran sur un autre site (voire, pourquoi pas, sur ZdS directement, pour qu’elles restent pérennes) ? Noelshack semble avoir des difficultés, j’ai constamment des erreurs 503 qui m’empêchent d’accéder à tes images

Jérôme Deuchnord

j’ai besoin de l’url pour la mettre sur zds

j’ai besoin de l’url pour la mettre sur zds

Awoken

Tu peux les déposer dans ta galerie, le site de donnera un code Markdown à coller.

Sinon j’ai fini par réussir à accéder à ton image, je comprends qu’il s’agit du résultat final désiré, mais ça ne me dit toujours pas quel problème tu rencontres exactement ?

+0 -0

j’ai besoin de l’url pour la mettre sur zds

Awoken

Tu peux les déposer dans ta galerie, le site de donnera un code Markdown à coller.

Sinon j’ai fini par réussir à accéder à ton image, je comprends qu’il s’agit du résultat final désiré, mais ça ne me dit toujours pas quel problème tu rencontres exactement ?

Jérôme Deuchnord

j’aimerais pouvoir mettre le contenu du fichier js, dans le fichier html

j’ai besoin de l’url pour la mettre sur zds

Awoken

Tu peux les déposer dans ta galerie, le site de donnera un code Markdown à coller.

Sinon j’ai fini par réussir à accéder à ton image, je comprends qu’il s’agit du résultat final désiré, mais ça ne me dit toujours pas quel problème tu rencontres exactement ?

Jérôme Deuchnord

Et j’ai essayé le writefile, plusieurs fois, ça ne marche toujours pas…

j’aimerais pouvoir mettre le contenu du fichier js, dans le fichier html

Awoken

Le problème, c’est que cela n’a aucun sens : comme dit plus haut par @Drulac, que veux-tu dire par « mettre le contenu du fichier js, dans le fichier html » ? Moi, je comprends : copier-coller le contenu du fichier JavaScript (lequel, d’ailleurs ? J’en vois au moins deux) dans le fichier HTML. Mais ce n’est probablement pas ce que tu veux faire :)

Et j’ai essayé le writefile, plusieurs fois, ça ne marche toujours pas…

Awoken

Pourquoi utilises-tu fs.writeFile() ? Qu’est-ce qui ne fonctionne pas ?

PS : merci d’éviter le double-post autant que possible (sauf pour le UP). Si tu as un détail à ajouter, préfère l’édition (bouton en haut à droite de ton post).

+0 -0

j’aimerais pouvoir mettre le contenu du fichier js, dans le fichier html

Awoken

Le problème, c’est que cela n’a aucun sens : comme dit plus haut par @Drulac, que veux-tu dire par « mettre le contenu du fichier js, dans le fichier html » ? Moi, je comprends : copier-coller le contenu du fichier JavaScript (lequel, d’ailleurs ? J’en vois au moins deux) dans le fichier HTML. Mais ce n’est probablement pas ce que tu veux faire :)

Et j’ai essayé le writefile, plusieurs fois, ça ne marche toujours pas…

Awoken

Pourquoi utilises-tu fs.writeFile() ? Qu’est-ce qui ne fonctionne pas ?

Jérôme Deuchnord

Sisi, c’est bien ça. je parle uniquement du fichier server.js et popup.html, les autres, on s’en fout. J’aimerais, que ce qui est affiché dans la page http://localhost:9500/api, soit affiché dans la page popup.html.

J’utilise fs.writeFile() car c’est une méthode recommandé pour ce que je veux faire, mais j’ai essayé, je n’ai pas réussi :/

Sisi, c’est bien ça. je parle uniquement du fichier server.js et popup.html, les autres, on s’en fout. J’aimerais, que ce qui est affiché dans la page http://localhost:9500/api, soit affiché dans la page popup.html.

D’accord, je pense que tu devrais te pencher sur les requêtes AJAX (XmlHttpRequest en JavaScript pur, ou via la méthode $.ajax() si tu utilises JQuery1). Ça permet de charger du contenu distant dynamiquement sur ta page Web.

J’utilise fs.writeFile() car c’est une méthode recommandé pour ce que je veux faire, mais j’ai essayé, je n’ai pas réussi :/

Awoken

Pour quelle raison cette méthode est-elle recommandée ? Pas pour descende qui que ce soit hein, simplement pour mieux connaître le contexte ;)


  1. Plus simple, mais je te recommande quand même d’étudier XmlHttpRequest si tu n’en as jamais fait, ne serait-ce que pour voir comment ça marche sous le capot. 

+0 -0

Sisi, c’est bien ça. je parle uniquement du fichier server.js et popup.html, les autres, on s’en fout. J’aimerais, que ce qui est affiché dans la page http://localhost:9500/api, soit affiché dans la page popup.html.

D’accord, je pense que tu devrais te pencher sur les requêtes AJAX (XmlHttpRequest en JavaScript pur, ou via la méthode $.ajax() si tu utilises JQuery1). Ça permet de charger du contenu distant dynamiquement sur ta page Web.

J’utilise fs.writeFile() car c’est une méthode recommandé pour ce que je veux faire, mais j’ai essayé, je n’ai pas réussi :/

Awoken

Pour quelle raison cette méthode est-elle recommandée ? Pas pour descende qui que ce soit hein, simplement pour mieux connaître le contexte ;)

Jérôme Deuchnord

Elle est simple, efficace. Je l’ai utilisé pour relier le timestamp qu’indiquer mon bot Discord à ma console et le fichier server.js

PS : Cela ne te dis pas de venir sur mon Discord ? Après tu pourras partir si tu veux, juste pour pouvoir mieux t’expliquer vu qu’il y aura mon bot :) !


  1. Plus simple, mais je te recommande quand même d’étudier XmlHttpRequest si tu n’en as jamais fait, ne serait-ce que pour voir comment ça marche sous le capot. 

Laisse le temps hein.

AmarOk

Oui, désolé :/

Tu n’as pas assez de paramètre pour writeFile.

Regarde la doc : https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback Il manque data :p

(La documentation déconseille d’utiliser readFileSync dans une application serveur car ça fige l’application).

A-312

Non, je l’ai rajouté. C’est toujours la même chose.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const express = require('express'); // Inclusion de ExpressJS
const fs = require('fs'); // Inclusion de fs (fs.readfile)
const path = require("path");
const moment = require("moment")
var app = express(); // Utilisé pour app.get/put/delete/post
var port = 9500; // On définit la valeur du port sur 9500
app.set('view engine', 'ejs');

// URL
app.get('/api', function (req, res) {

// On lit le ficher time.json dans TimeBot/json/time.json. Puis, on envoie "timestamp" dans le res.send.



let ts_str = fs.readFileSync('./TimeBot/json/time.json', { encoding: 'utf-8' });
let ts = JSON.parse(ts_str);
let ts_remaining_str = moment(ts.timestamp).fromNow(); 
let msg = "Il reste " + ts_remaining_str + " avant le debut du live.";
res.send(msg);



});

app.get('/', function (req, res){
      res.send("va pas ici, y'a rien. Va plutôt à cette adresse : http://localhost:9500/api");
});


app.get('/', function(req, res) {
  try {
    let ts = fs.readFileSync('./TimeBot/json/time.json', { encoding: 'utf-8' });
    res.render('index', { timestamp: JSON.parse(ts).timestamp });


    moment(1500048000000).fromNow();

  fs.writeFile("C:\\Users\\admin\\Desktop\\addon\\MonAPI\\Extension_Chrome\\popup.html", function(err, data) {
    res.send(msg);
   });


  } catch (e) { 
    res.send("error");
  }
});





// Port sur lequel est lu le serveur, soit 9500
app.listen(port, function(err){
    if (err) throw err;
    console.log("nickel !");
});

`

Re, J’ai cherché un peu partout dans mon code, en espérant trouvé une solution…et je n’en ai pas trouvé. Mais, cependant j’ai trouvé quelque chose qui normalement ne devrait pas arrivé selon moi. En effet, lorsque je fais un writeFile dans mon fichier time.js(bot Discord) cela fonctionne. Mais, lorsque je veux faire un writeFile depuis mon fichier server.js, cela ne fonctionne pas, j’ai essayé tout les chemins possible, et même d’envoyé un message sur une page html, cela ne fonctionne pas, même via la méthode res.send. Du coup, je pense avoir fait une erreur dans mon code, c’est pas possible autrement (de mon point de vu).

Merci.

Tu n’as pas assez de paramètre pour writeFile.

Regarde la doc : https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback Il manque data :p

(La documentation déconseille d’utiliser readFileSync dans une application serveur car ça fige l’application).

A-312
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte