如何从目录中读取文件并作为JSON发送给客户端?

时间:2016-06-29 15:33:02

标签: javascript angularjs json node.js

我在服务器目录中记录文件我想向客户端显示文件名,所以我创建了正确读取名称的readDirectory.js现在我对node.js很新,我正在尝试发送json数据到客户端但没有发生,如何使用快递将日志文件名发送给客户端?

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

});

3 个答案:

答案 0 :(得分:2)

您必须将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());
});

答案 1 :(得分:1)

您的 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});
   });
});

希望这个帮助!

答案 2 :(得分:0)

自Node v11.0.0起,您可以使用require('fs').promises来获得承诺。

在您的情况下,您要将目录中的文件数组推入“日志”数组。由于在这种情况下,“日志”将始终是只有一个值的数组,因此我没有使用它。

您可以这样做:

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://stackoverflow.com/a/56821924/8021938

来源: https://nodejs.org/api/fs.html#fs_fspromises_readfile_path_options