使用文件系统和 Express.js 读取/写入文件
Reading / Writing Files with File-System and Express.js
我是 express.js 的新手,我将其用作我的 NodeJS 后端,提供标准网页。
在我的 express app.js 文件中,我有通常的节点依赖项,但我也包含文件系统。
虽然我提供的是一个典型的网页,但我想访问 fs read/write 函数。我已将这些函数包含在我的 express app.js 文件中,但我似乎无法从我的网页的 js 文件中调用它们。我认为这是某种 inheritance/scope 问题?
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 文件调用 read/save 文件函数。
你的代码有小错误。
var fs = require('file-system'); // wrong way
var fs = require('fs'); // right way
您可以使用这些方式导入fs模块。
tl;dr 你不能
据我了解,您正在尝试从您的前端 js 文件调用 read/save 函数,该文件由 myWebpage 文件夹提供。这种透明度是不可能的。
问题是服务器上后端 node.js 环境中的 js 文件 运行 与浏览器中的前端 javascript 运行 是隔离的客户端机器。他们可以进行通信的唯一方式是通过 HTTP 调用。
为此,您需要创建一个可以从您的客户端访问的路由。此外,您需要通过查询字符串传递参数:/save?url=path
app.get('/read', function(request, response) {
readFile(request.query.url);
})
保存路由稍微复杂一点,因为需要用到post请求。
首先,您需要使用 body-parser 中间件来解析 body 参数:app.use(bodyParser.urlencoded());
其次,您需要创建保存路径
app.post('/save', function(request, response) {
saveFile(request.query.url, request.body.body);
});
并且在您的客户端 js 文件中,您需要通过 xhr 的请求将 get/post 设为此路由:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
我是 express.js 的新手,我将其用作我的 NodeJS 后端,提供标准网页。
在我的 express app.js 文件中,我有通常的节点依赖项,但我也包含文件系统。
虽然我提供的是一个典型的网页,但我想访问 fs read/write 函数。我已将这些函数包含在我的 express app.js 文件中,但我似乎无法从我的网页的 js 文件中调用它们。我认为这是某种 inheritance/scope 问题?
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 文件调用 read/save 文件函数。
你的代码有小错误。
var fs = require('file-system'); // wrong way
var fs = require('fs'); // right way
您可以使用这些方式导入fs模块。
tl;dr 你不能
据我了解,您正在尝试从您的前端 js 文件调用 read/save 函数,该文件由 myWebpage 文件夹提供。这种透明度是不可能的。
问题是服务器上后端 node.js 环境中的 js 文件 运行 与浏览器中的前端 javascript 运行 是隔离的客户端机器。他们可以进行通信的唯一方式是通过 HTTP 调用。
为此,您需要创建一个可以从您的客户端访问的路由。此外,您需要通过查询字符串传递参数:/save?url=path
app.get('/read', function(request, response) {
readFile(request.query.url);
})
保存路由稍微复杂一点,因为需要用到post请求。
首先,您需要使用 body-parser 中间件来解析 body 参数:app.use(bodyParser.urlencoded());
其次,您需要创建保存路径
app.post('/save', function(request, response) {
saveFile(request.query.url, request.body.body);
});
并且在您的客户端 js 文件中,您需要通过 xhr 的请求将 get/post 设为此路由:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest