【问题标题】:How to store a function value into a variable nodejs server get-folder-size如何将函数值存储到变量nodejs服务器get-folder-size中
【发布时间】:2019-06-16 04:04:58
【问题描述】:

我正在尝试查找文件夹(内容)的大小,经过挖掘发现最好是使用 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]。我现在想将此获得的大小存储到一个变量中,请提供任何帮助/想法... .?

【问题讨论】:

  • 为了能够在reqSize 中为您提供帮助,您希望将值保存为字节还是 MB?
  • MB 会很棒,拜托 :)
  • 我希望它是你正在寻找的,我建议你批准我为你的问题制作的版本,以便其他有类似问题的用户更容易理解,欢迎来到Stack Overflow 和愉快的编码!
  • 这是完美的答案。非常详细、准确和完整!我不知道如何批准该版本,但这是 110% 完美的答案!非常感谢您的帮助。干杯:)

标签: javascript node.js express asynchronous promise


【解决方案1】:

文件夹大小计算是一个异步过程,在执行异步过程时会用到promise和callbacks。

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

如果你不知道 Promise 是如何工作的,我留下这个链接,这样你就可以 阅读并理解。 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',
            });
        });
    });
}

这里我们得到了promise的值,为了得到数据必须这样做,这被称为resolving the promise

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

【讨论】:

    【解决方案2】:

    为什么不在 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});
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      相关资源
      最近更新 更多