2017-07-01 243 views
0

我是express.js的新手,我將它用作我的NodeJS後端,爲標準網頁提供服務。使用File-System和Express.js讀取/寫入文件

在我的express的app.js文件中,我有通常的節點依賴關係,但我也有文件系統。

雖然我服務於一個典型的網頁,但我想訪問fs讀/寫功能。我已將這些函數包含在我的快速app.js文件中,但似乎無法從我的網頁的js文件中調用它們。我認爲這是某種繼承/範圍問題?

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!'); 
     } 
    }); 
} 

注意這裏的關鍵是,我試圖調用read /從myWebpage/js文件保存文件功能。

+0

請問您可以包括您的代碼嗎? – Vasi

+0

@Vasi - 已添加。我不認爲要添加它,因爲它基本上是樣板代碼。 – Karric

回答

0

TL;博士你不能

我瞭解你正在試圖調用read /從你的保存功能前端的js文件,這些文件從文件夾myWebpage服務。這種透明度是不可能的。

問題是,在服務器上的後端node.js環境中運行的js文件與您的客戶端計算機上瀏覽器內運行的前端JavaScript隔離。唯一的方法就是通過HTTP調用進行通信。

爲了做到這一點,您需要創建一條路線,可以從您的客戶端到達。此外,您還需要通過查詢字符串來傳遞參數:/保存URL =路徑

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

儲存路線是有點複雜,因爲它需要使用POST請求? 首先,你需要使用身體的解析器的中間件,以解析車身參數:app.use(bodyParser.urlencoded());

其次,你需要創建一個保存路徑

並在您的客戶端js文件,你需要得到/通過xhr通過請求張貼此路線:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

0

在你的代碼中有一個小小的錯誤。

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

您可以通過這些方式導入fs模塊。

Sample express.js code

+0

這不能解決範圍問題。調用函數時仍然會出現'fs not defined'。我已經正確安裝了fs。 – Karric

+0

fs是節點js的默認模塊。你不想安裝它。你能顯示你的錯誤嗎? – Vasi