Azure Функция, возвращающая 401 при передаче параметров через прокси - PullRequest
0 голосов
/ 10 марта 2020

У меня есть служба angular, которая имеет запрос GET с параметрами currentPage и postsPerPage. Я пытаюсь передать параметры в функцию azure, и я следую инструкциям, в которых рассказывается, как настроить прокси.

, если я использую этот URL, который предоставляется при запуске func start

 }>(`http://localhost:7071/api/GetListingsWithPagination/`, { params })

тогда я могу достичь конечной точки и ошибка currentPage is undefined. Что хорошо, потому что я не передаю currentPage с прокси.

Итак, перейдем к настройке прокси:

enter image description here

с этой конфигурацией у меня есть angular служба


с использованием этой конечной точки в angular службе

      }>(`https://[sitename].azurewebsites.net/api/listings/${postsPerPage}/${currentPage}`, { params })

, но она возвращает

401 unauthorized в консоли браузера и никогда не выводится в azure функциональной консоли.

Как мне заставить мои параметры работать?

angular service

  getWins(bidderId: string, currentPage: number, listingRoute: string) {
    const postsPerPage = 10;
    const queryParams = postsPerPage + "/" + currentPage;

    const params = new HttpParams()
      .set("bidderId", bidderId)
      .set("listingRoute", listingRoute);
    return this.http
      .get<{
        message: string;
        posts: any;
        maxPosts: number;
        activeBidsList: string;
      }>(`https://[sitename].azurewebsites.net/api/listings/${postsPerPage}/${currentPage}`, { params })
      .pipe(
        map(retrievedData => {
          return {
            posts: retrievedData.posts.map(post => {
              return {
                title: post.title,
                startingBid: post.startingBid,
                increments: post.increments,
                shippingCost: post.shippingCost,
                bidderId: post.bidderId,
                id: post._id
              };
            }),
            maxPosts: retrievedData.maxPosts
          };
        })
      );
  }

azure function

var MongoClient = require('mongodb').MongoClient;
//var Post = require('./model/post');

module.exports = function (context, req) {


  MongoClient.connect(process.env.CosmosDBConnectionString, (err, client) => {

    let send = response(client, context);
    if (err) send(500, err.message);


    console.log("DBNAME: " + process.env.dbName);

    let db = client.db(process.env.dbName);

    let params = ({ currentPage, postsPerPage } = req.params);





    let postPerPage = +params.postPerPage;
    let currentPage = params.currentPage;
    console.log(postsPerPage);
    console.log(currentPage);
    return;
  });
}

1 Ответ

0 голосов
/ 11 марта 2020

Судя по описанию вашего вопроса, ваша функция работает на портале azure, а внутренний URL-адрес развернут на локальном. Я думаю, вам нужно развернуть проект, который соответствует функции http://localhost:7071/api/GetListingsWithPagination to azure, а затем поместить его URL на azure в поле ввода "backend url". Если вы просто запустите его на локальном компьютере, ваша функция azure не сможет вызвать его успешно, и прокси-сервер также не сможет направить на этот URL.

Обновление:

I Я немного озадачен последним описанием в комментариях, поэтому здесь я приведу образец для вашей справки.

Я имею в виду, что вы можете развернуть свой localhost api как функцию на портале azure, после развертывания. на azure вы можете получить ее URL функции (например, https://fromlocal.azurewebsites.net/api/HttpTrigger1). Затем вы можете go в функции nodejs настроить прокси-сервер, установить этот URL-адрес в качестве внутреннего URL-адреса (как показано на скриншоте ниже): enter image description here

Затем вы можете запросите URL-адрес маршрута (прокси-адрес) в вашем nodejs коде. enter image description here

Кстати, ваше первоначальное требование - запрос API localhost. Для этого требования вы устанавливаете прокси для вызова API localhost. Но вы развернули localhost api как функцию на azure, поэтому я думаю, что вы также можете запросить URL функции напрямую (без установки прокси).

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