nodejs попробуйте использовать catch и res.status - PullRequest
0 голосов
/ 23 сентября 2018

Я все еще не очень доволен своим кодом в отношении структурирования try / catch и res.status.Я предполагаю, что блок catch никогда не будет достигнут, когда ошибка в запросе возвращается как ответ, верно?Каков наилучший способ структурировать это, я заинтересован только в возвращении правильного res.status в отношении возникающей ошибки ??

setPublicLink: async (req, res, next) => {

    try{
        console.log('Entering setPublicLink');

        var mytoken = "Bearer "+process.env.MY_TOKEN;

        request({
                url: ' https://content.dropboxapi.com/2/files/upload',
                headers: {
                  'content-type' : 'application/octet-stream',
                  'authorization' : mytoken
                },
                encoding: null,
                method: 'POST',
                body: fs.createReadStream(fileItem.path),
                encoding: null
               }, (error, response, body) => {
                    if (error) {
                        console.log(error);
                        console.log(response);
                        //return res.status(401).json({error: 'Upload of file was not successful.'});
                    } else if ( response.statusCode == 200) {
                        //nothing to do
                    } else {
                        console.log(response);
                        return res.status(401).json({error: 'Upload of file was not successful.'});
                    }
               });

        request({
            url: 'https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings',
            headers: {
                'content-type' : 'application/json',
                'authorization' : mytoken
            },
            method: 'POST',
            body: JSON.stringify(reqBodyJson)
            }, (error, response, body) => {
                if (error) {
                    console.log(error);
                    console.log(response);
                    return res.status(401).json({error: 'Error when trying to set public link'});
                } else if ( response.statusCode == 200) {
                    return res.status(200).json({success: 'Public Link has been set successfully.'});  
                } else if ( response.statusCode == 409) {
                    return res.status(409).json({error: 'Nothing to set. Public link already exists.'});  
                } else {
                    return res.status(401).json({error: 'Could not set public link'});
                }
            });

    }
    catch (err) {
        console.log('Error Occured : '+ err);
        return res.status(401).json({error: 'Error occured trying to set publicLink'});
    }

},

1 Ответ

0 голосов
/ 23 сентября 2018

ваш код никогда не попадет в блок catch, поскольку вы обрабатываете все ошибки.но ваш стиль кода трудно поддерживать, лучше использовать обещания, например, вы можете использовать модуль request-обещание , тогда ваш код будет выглядеть так, как если бы у вас был узел 8 +:

setPublicLink: async (req, res, next) => {
try{
    console.log('Entering setPublicLink');
    var mytoken = "Bearer "+process.env.MY_TOKEN;
    var response = await requestPromise({
            url: ' https://content.dropboxapi.com/2/files/upload',
            headers: {
              'content-type' : 'application/octet-stream',
              'authorization' : mytoken
            },
            encoding: null,
            method: 'POST',
            body: fs.createReadStream(fileItem.path),
            encoding: null
           });
var response1 = await requestPromise({

url: 
'https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings',
            headers: {
                'content-type' : 'application/json',
                'authorization' : mytoken
            },
            method: 'POST',
            body: JSON.stringify(reqBodyJson)
          });
res.send({success: 'Public Link has been set successfully.'});// it sends 200 automatically
    }
catch(ex){
res.sendStatus(401);
}
    }

также вы можете получить заголовки ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...