如何将函数值存储到变量nodejs服务器中get-folder-size

时间:2019-01-22 16:22:59

标签: javascript node.js express asynchronous promise

我试图找出文件夹(内容)的大小,在挖掘出最好的方法之后,就是使用get-folder-size软件包。因此,以下代码讲述了故事的其余部分:

const express = require('express');
const app = express();
const getSize = require('get-folder-size');
var reqSize = 0;
// This serves static files from the specified directory
app.use(express.static(__dirname));

getSize('videos', (err, size) => {
    if (!err) {
        console.log(size + ' bytes');
        console.log((size / 1024 / 1024).toFixed(2) + ' MB');
    } else {
        throw err;
    }
});

app.get('/test', (req, res) => {
    //res.sendFile(__dirname + '/views/test.html',);
    res.json({ title: 'zaffar', message: 'abbas', size: reqSize });
});

const server = app.listen(3001, () => {
    const host = server.address().address;
    const port = server.address().port;
    console.log('App listening at https://%s:%s', host, port);
});

getSize()在控制台中打印正确大小的文件夹,我正在努力将其存储在变量中,以便可以使用 JavaScript将变量转发/传递给index.html。从服务器获取详细信息。 html文件 [从服务器获取详细信息的链接] [1]。我现在想将此获取的大小存储到变量中,请提供任何帮助/想法...。?

2 个答案:

答案 0 :(得分:1)

文件夹大小计算是一个异步过程,执行异步过程时将使用promise和回调。

在这种情况下,我使用promises在计算结束时获取文件夹大小。

  

如果您不知道承诺的运作方式,请留下此链接,以便您可以   阅读和理解。   Promises

getSize()函数是使用promise的函数,计算异步运行,并且在结束时返回值(resolve)或错误(reject)。

function getSize() {
    return new Promise((resolve, reject) => {
        require('get-folder-size')('videos', (err, size) => {
            if (err) return reject(err);
            resolve({
                sizeBytes: size + ' bytes',
                sizeMB: (size / 1024 / 1024).toFixed(2) + ' MB',
            });
        });
    });
}

在这里,我们获得了承诺的价值,要获取必须以这种方式进行处理的数据,这称为<承诺>解决承诺。

app.get('/test', (req, res) => {
    //res.sendFile(__dirname +'/views/test.html',);
    getSize().then((data) => {
        const { sizeMB } = data;
        res.json({ title: 'zaffar', message: 'abbas', size: sizeMB });
    });
});

您已将所有更改应用于代码:

const express = require('express');
const app = express();

// This serves static files from the specified directory
app.use(express.static(__dirname));

function getSize() {
    return new Promise((resolve, reject) => {
        require('get-folder-size')('videos', (err, size) => {
            if (err) return reject(err);
            resolve({
                sizeBytes: size + ' bytes',
                sizeMB: (size / 1024 / 1024).toFixed(2) + ' MB',
            });
        });
    });
}

app.get('/test', (req, res) => {
    //res.sendFile(__dirname +'/views/test.html',);
    getSize().then((data) => {
        const { sizeMB } = data;
        res.json({ title: 'zaffar', message: 'abbas', size: sizeMB });
    });
});

const server = app.listen(3001, () => {
    const host = server.address().address;
    const port = server.address().port;
    console.log('App listening at https://%s:%s', host, port);
});

答案 1 :(得分:1)

为什么不只在app.get('/ test')路由中调用getSize?

const express = require('express');
const app = express();
const getSize = require('get-folder-size');
var reqSize=0;

app.get('/test',(req,res)=>{
    getSize("videos", (err, size) => {
        if(!err && size > 0){
            reqSize = (size / 1024 / 1024).toFixed(2) + ' MB';
        }
        res.json({title:"zaffar",message:"abbas", size:reqSize});
    });
});