2017-07-01 2 views
0

Je suis nouveau sur express.js, et je l'utilise comme backend NodeJS, servant une page web standard.Lecture/écriture de fichiers avec File-System et Express.js

Dans le fichier de mon express de app.js je les dépendances habituelles de nœud, mais je dois également le système de fichiers inclus.

Bien que je sers une page Web typique, j'aimerais avoir accès aux fonctions de lecture/écriture fs. J'ai inclus ces fonctions dans mon fichier express app.js, mais je n'arrive pas à les appeler à partir des fichiers js de ma page Web. Je suppose que c'est une sorte de problème d'héritage/portée?

var http = require('http'); 
var https = require('https'); 
var express = require('express'); 
var app = express(); 

var path = require('path'); 
var fs = require('file-system'); 
var helmet = require('helmet'); 
app.use(helmet()); 

[…] 

app.use(express.static('../myWebpage/')); 

app.get('/', function (req, res) { 
    res.sendFile(path.join(__dirname + '/../myWebpage/')); 
    // res.send('Get Request!') 
}) 

[…] 

function readFile(url){ 
    fs.readFile(url, 'utf8', function(err, data){ 
     if (err) { 
      console.log('error', err); 
     } else { 
      console.log('file read'); 
      return data; 
     } 
    }); 
} 

function saveFile(url, body){ 
    fs.writeFile(url, body, (err) => { 
     if (err) { 
      console.log('Error saving'); 
      throw err; 
     } else { 
      console.log('It\'s saved!'); 
     } 
    }); 
} 

Remarque Le point ici est que je suis en train d'appeler la lecture/fonctions de sauvegarde de fichiers à partir du fichier du myWebpage /.

+0

Pouvez-vous s'il vous plaît inclure votre code? – Vasi

+0

@Vasi - Ajouté. Je n'ai pas pensé à l'ajouter parce que c'est fondamentalement un code standard. – Karric

Répondre

0

tl; dr vous ne pouvez pas

que je compris que vous essayez d'appeler lecture/fonction de sauvegarde de la vôtre fichiers de frontaux, qui est servi à partir du dossier myWebpage. Ce n'est pas possible avec une telle transparence.

Le problème est que les fichiers js en cours d'exécution dans votre back-end Node.js environnement sur un serveur sont isolés de la vôtre-end avant l'exécution de JavaScript dans le navigateur sur une machine cliente. Le seul moyen, ils peuvent communiquer est à travers des appels HTTP. Pour ce faire, vous devez créer un itinéraire, qui peut être atteint à partir de votre client. En outre, vous devez passer des paramètres via la chaîne de requête:/save url = chemin

app.get('/read', function(request, response) { 
    readFile(request.query.url); 
}) 

sauver route est un peu plus compliqué, car il a besoin d'utiliser la demande de poste?. Tout d'abord, vous devez utiliser un middleware-analyseur de corps afin d'analyser les paramètres du corps: app.use(bodyParser.urlencoded());

Deuxièmement, vous devez créer un itinéraire Enregistrez

Et dans le dossier de votre client, vous devez vous rendre/poster sur ces routes via des demandes via xhr: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

0

Dans votre code a une erreur mineure.

var fs = require('file-system'); // wrong way 
var fs = require('fs'); // right way 

Vous pouvez importer le module fs de la manière suivante.

Sample express.js code

+0

Cela ne résout pas le problème de portée. Je reçois toujours 'fs non défini' lors de l'appel des fonctions. J'ai fs installé correctement. – Karric

+0

Le fs est le module par défaut du noeud js. Vous ne voulez pas l'installer. Pouvez-vous montrer votre erreur? – Vasi