使用File-System和Express.js读/写文件

时间:2017-07-01 18:05:54

标签: javascript node.js express filesystems

我是express.js的新手,我将其用作我的NodeJS后端,为标准网页提供服务。

在我的express app.js文件中,我有通常的节点依赖,但我也有文件系统。

虽然我正在为典型网页提供服务,但我希望能够访问fs读/写功能。我已将这些功能包含在我的express 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!');
        }
    });
}

注意这里的重点是我试图从myWebpage / js文件调用读取/保存文件函数。

2 个答案:

答案 0 :(得分:0)

在您的代码中有轻微错误。

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

您可以使用这些方式导入fs模块。

Sample express.js code

答案 1 :(得分:0)

tl;博士你不能

据我所知,你试图从你的前端js文件调用读/保存功能,这些文件是从myWebpage文件夹提供的。这种透明度是不可能的。

问题是在服务器上的后端node.js环境中运行的js文件与在客户端计算机上的浏览器内运行的前端javascript隔离。唯一可以通过HTTP调用进行通信的方式。

为此,您需要创建一条路线,可以从您的客户端到达。此外,您需要通过查询字符串传递参数:/ save?url = path

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

保存路由有点复杂,因为它需要使用post请求。 首先,您需要使用正文解析器中间件来解析主体参数:app.use(bodyParser.urlencoded());

其次,您需要创建保存路径

app.post('/save', function(request, response) {
  saveFile(request.query.url, request.body.body);
});

在您的客户端js文件中,您需要通过xhr的请求来获取/发布此路由:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest