如何通过NodeJS从局域网远程获取共享目录文件名列表?
如何从局域网远程机器获取NodeJS共享目录的文件名列表?
我已通过NodeJS在局域网(LAN)中成功共享了一个目录,目前希望从同一局域网内的另一台远程机器上获取该共享目录下的所有文件名,请问该如何实现?提前感谢!
编辑说明:我尝试从同一局域网内的另一台机器访问文件名列表。
服务端现有代码
var express = require('express'); var fs = require('fs'); var morgan = require('morgan'); var app = express(); var accessLogStream = fs.createWriteStream(__dirname + '/access.log', {flags: 'a'}); app.use(morgan('combined', {stream: accessLogStream})); var PORT = 5000; app.use('/desktop', express.static('/home/lnx/desktop')); app.use(function(err, req, res, next) { console.log("error!!!"); console.log(err.stack); }); app.get('/', function (req, res) { res.send('Hello'); }); var server = app.listen(PORT, function () { var host = '192.168.3.76' var port = server.address().port; console.log('App listening at http://%s:%s', host, port); });
我尝试的代码(无法正常工作)
//something like this const fs = require('fs') const folderURL = 'http://192.168.3.76:5000/desktop'; fs.readdirSync(folderURL).forEach(file => { console.log(file); });
解决方案
问题核心原因
fs.readdir/fs.readdirSync仅能读取本地文件系统路径,无法直接访问远程HTTP地址,这是你之前代码失效的根本原因。要实现需求,需要服务端提供一个接口返回目录文件列表,客户端通过HTTP请求获取该数据。
方法1:开启Express静态目录的列表功能
修改服务端的express.static配置,开启目录列表展示:
app.use('/desktop', express.static('/home/lnx/desktop', { index: false, // 禁用默认首页文件(如index.html) directory: true // 开启目录列表展示 }));
此时访问http://192.168.3.76:5000/desktop会返回Express默认的目录页面,但客户端需要解析HTML才能提取文件名,适合手动查看,不适合程序自动化处理。
方法2:自定义API接口返回JSON格式文件列表(推荐)
在服务端新增一个接口,读取目标目录并返回JSON格式的文件名列表:
// 在服务端代码中添加以下路由 app.get('/desktop/files', (req, res) => { const targetDir = '/home/lnx/desktop'; fs.readdir(targetDir, (err, files) => { if (err) { console.error('读取目录失败:', err); return res.status(500).json({ error: '无法读取目录内容' }); } // 返回文件名数组 res.json(files); }); });
客户端请求示例(使用node-fetch)
- 先安装依赖:
npm install node-fetch
- 客户端代码:
const fetch = require('node-fetch'); async function fetchRemoteFiles() { try { const response = await fetch('http://192.168.3.76:5000/desktop/files'); if (!response.ok) { throw new Error(`请求失败,状态码: ${response.status}`); } const files = await response.json(); console.log('远程目录文件列表:'); files.forEach(file => console.log(file)); } catch (err) { console.error('获取文件列表失败:', err.message); } } fetchRemoteFiles();
客户端请求示例(使用Node.js内置http模块)
无需额外安装依赖:
const http = require('http'); http.get('http://192.168.3.76:5000/desktop/files', (res) => { let rawData = ''; res.on('data', (chunk) => { rawData += chunk; }); res.on('end', () => { try { const files = JSON.parse(rawData); console.log('远程目录文件列表:'); files.forEach(file => console.log(file)); } catch (err) { console.error('解析响应失败:', err.message); } }); }).on('error', (err) => { console.error('请求出错:', err.message); });
内容的提问来源于stack exchange,提问作者sarem dave
相关产品推荐
相关产品推荐

