如何从目录中读取文件并作为 JSON 发送给客户端?
Posted
技术标签:
【中文标题】如何从目录中读取文件并作为 JSON 发送给客户端?【英文标题】:How can I read files from directory and send as JSON to client? 【发布时间】:2016-11-01 10:14:27 【问题描述】:我在服务器目录中有日志文件,我想向客户端显示文件名,所以我创建了readDirectory.js
,它可以正确读取名称现在我对node.js
很陌生,我正在尝试发送json
数据到客户端,但它没有发生,我如何使用 express 将日志文件名发送给客户端?
readDirectory.js
var fs = require('fs');
var path = './Logs'
var Logs = [];
function readDirectory()
fs.readdir(path, function(err, items)
Logs.push(items);
/* console.log(items);
for (var i=0; i<items.length; i++)
console.log(items[i]);
*/
);
return Logs;
exports.readDirectory = readDirectory;
app.js
var express = require('express');
var app = express();
var readDirectory = require('./readDirectory');
app.use(express.static(__dirname + "/public"));
app.get('/logs',function(req,res)
res.send(readDirectory.readDirectory());
);
angularFactory.js
angular.module('App').factory('DitFactory', function ($http)
'use strict';
var data;
return
data:"data from factory"
getLogs: function ()
return $http.get('/logs')
.then(function (response)
return response.data;
);
);
【问题讨论】:
【参考方案1】:你必须将Logs
数组序列化成json并发送回客户端
app.get('/logs',function(req,res)
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify(readDirectory.readDirectory()));
);
或者
app.get('/logs',function(req,res)
res.json(readDirectory.readDirectory());
);
【讨论】:
我仍然没有看到数据,我不知道为什么 尝试使用网络浏览器访问JSON?或者你可以试试console.log(response)
我认为首先我没有从readDirectory.js
到app.js
获取数据,出于某种原因我对其进行了调试,我在readDirectory
函数的日志数组中看到了4 个项目,但它没有被传递给app.js
你在app.js中调试var readDirectory = require('./readDirectory');
这行了吗
Server.connections property is deprecated. Use Server.getConnections method instead.
它正在调用函数 readDirectory
但它没有返回任何内容【参考方案2】:
您的 readDirectory.js 应如下所示:
var fs = require('fs');
var path = './Logs'
var Logs = [];
function readDirectory(callback)
fs.readdir(path, function(err, items)
Logs.push(items);
callback(Logs);
);
exports.readDirectory = readDirectory;
你的 app.js 应该是这样的:
var express = require('express');
var app = express();
var readDirectory = require('./readDirectory');
app.use(express.static(__dirname + "/public"));
app.get('/logs',function(req,res)
readDirectory.readDirectory(function(logFiles)
res.json(files : logFiles);
);
);
希望得到帮助!
【讨论】:
【参考方案3】:从 Node v11.0.0 开始,您可以使用require('fs').promises
来获得承诺。
在您的情况下,您将目录中的文件数组推送到“日志”数组中。由于在这种情况下,“Logs”将始终是一个只有一个值的数组,所以我没有使用它。
你可以这样做:
var fs = require('fs').promises;
var path = './Logs'
async function readDirectory()
const files = await fs.readdir(path);
return files;
为了返回文件夹中的文件列表,请像这样更改您的 app.js:
app.get('/logs', function (req, res)
readDirectory.readDirectory()
.then((files) =>
res.send(files);
);
);
完整答案的链接: https://***.com/a/56821924/8021938
来源: https://nodejs.org/api/fs.html#fs_fspromises_readfile_path_options
【讨论】:
@m02ph3u5 我刚刚添加了这个案例的答案,希望对您有所帮助。以上是关于如何从目录中读取文件并作为 JSON 发送给客户端?的主要内容,如果未能解决你的问题,请参考以下文章
小记---------maxwell 一个可以实时读取mysql二进制日志binlog,并生成JSON格式的消息,作为生产者发送给kafka,Redis,文件或其他平台的应用程序