在nodejs服务器上而不是if / else上提供文件的更好方法

时间:2016-04-01 18:37:20

标签: javascript node.js express

我有一个端点,根据用户在网页上的选择为用户提供下载文件。但是,根据用户选择的可能性,我能想到的唯一方法就是使用if / else语句。

router.post('/process', function(req, res) {
    if(req.query.os == 'Windows' && req.query.rec == 'Computer Information' && req.query.report == 'Local Report') {
        res.send('http://localhost:3033/proc/windows/info/local/files.zip');
    } else if (req.query.os == 'Windows' && req.query.rec == 'User Information' && req.query.report == 'Local Report') {
        res.send('http://localhost:3033/proc/windows/uinfo/local/files.zip');
    }
}

如果我为Linux或OSX添加选项,则不得不考虑这些选项,因此代码将变得非常冗长和丑陋。我有更好的方法来解释这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以变量转换为网址部分。它将更容易维护。例如:

router.post('/process', function(req, res) {
    var url_parts = {
        'os' : {
            'Windows' : 'windows',
            'Linux' : 'linux',
            'OSX' : 'mac'
        },
        'rec' : {
            'Computer Information' : 'info',
            'User Information' : 'uinfo'
        },
        'report' : {
            'Local Report' : 'local',
            'Global Report' : 'global'
        }
    };

    res.send(
        'http://localhost:3033/proc/'
        + url_parts.os[req.query.os]
        + '/' + url_parts.rec[req.query.rec]
        + '/' + url_parts.report[req.query.report]
        + '/files.zip'
        );
});