Добавить параметр в запрос API? - PullRequest
0 голосов
/ 08 января 2019

У меня есть метод, который вызывается, передается имя файла, а затем выполняет API-вызов к внутреннему интерфейсу, чтобы получить предварительно авторизованную ссылку. Я пытаюсь добавить параметр (имя файла) в конец URL, но он вызывает мой запрос API к 404.

Как правильно передать параметр с моим запросом API и вернуть предварительно авторизованный URL-адрес в ответе?

Имена моих файлов также могут содержать пробелы, которые, как я подозреваю, могут иметь отношение к запросу, возвращающему 404.

Это звонок на мой интерфейс :

getPreauthorizedLink(fileName) {   
    console.log(fileName);
    var fileName = fileName;
    var url = 'reportPresignedURL/' + fileName;
    fetch(config.api.urlFor(url))
    .then((response) => response.json())
    .then((url) => {
        console.log(url);
    });
}

И это реализация этого API на серверной части :

reports.get('/reportPresignedURL/:fileName', async (req, res) => {
    const subscriberID = req.query.subscriberID || 0;

    var AWS = require('aws-sdk');

    var s3 = new AWS.S3();

    var params = { 
        Bucket: config.reportBucket,
        Key: req.params.fileName,
        Expires: 60 * 5
    }

    try {
        s3.getSignedUrl('getObject', params, function (err, url) {
            if(err)throw err;
            console.log(url)
            res.json(url);
        });
    } catch (err) {
        res.status(500).send(err.toString());
    }
});

Я попытался изолировать проблему до того, как я передаю параметр, выполнив следующие действия в front end :

  getPreauthorizedLink(fileName){

    console.log(fileName);

    var fileName = fileName;

    var testFileName = 'test';

    var url = 'reportPresignedURL/' + testFileName.replace(/ /g, '%20').replace(/\//g, '%2F');

    fetch(config.api.urlFor(url))
    .then((response) => response.json())
    .then((url) => {

      console.log(url);
  });
  }

Вот как я указываю маршрут API в config.js:

reportPresignedURL: '/reports/reportPresignedURL',

Я также попытался указать это так:

reportPresignedURL: '/reports/reportPresignedURL/:fileName',

Для вашей информации, я добавил этот маршрут API в мой config.js во внешнем интерфейсе.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Решил, сделав это:

  getPreauthorizedLink(fileName){

    console.log(fileName);

    var fileName = fileName;

    let url = config.api.urlFor('reportPresignedURL', fileName);

    fetch(config.api.urlFor(url))
    .then((response) => response.json())
    .then((url) => {

      console.log(url);
  });
  }
0 голосов
/ 08 января 2019

Вы можете использовать синтаксис es6
let url = reportPresignedURL/${fileName}; для параметров запроса

let url = reportPresignedURL/?fileName=${fileName};

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