Oefening: Een opslagaccount gebruiken om een statische website te hosten
Nu de API is geïmplementeerd in de cloud, moet u als Tailwind Traders-engineer de clientcode bijwerken en implementeren ter ondersteuning van de SignalR-berichten die beschikbaar zijn voor Azure Functions.
De clienttoepassing bijwerken
Open
./start/client/src/index.js
en vervang in Visual Studio Code alle code om te luisteren naar SignalR-berichten. De code haalt de eerste voorraadlijst op met een HTTP-aanvraag en luistert vervolgens naar updates van de SignalR-verbinding. Wanneer een voorraad wordt bijgewerkt, werkt de client de aandelenkoers in de gebruikersinterface bij.import './style.css'; import { BACKEND_URL } from './env'; const app = new Vue({ el: '#app', data() { return { stocks: [] } }, methods: { async getStocks() { try { const url = `${BACKEND_URL}/api/getStocks`; console.log('Fetching stocks from ', url); const response = await fetch(url); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status} - ${response.statusText}`); } app.stocks = await response.json(); } catch (ex) { console.error(ex); } } }, created() { this.getStocks(); } }); const connect = () => { const signalR_URL = `${BACKEND_URL}/api`; console.log(`Connecting to SignalR...${signalR_URL}`) const connection = new signalR.HubConnectionBuilder() .withUrl(signalR_URL) .configureLogging(signalR.LogLevel.Information) .build(); connection.onclose(() => { console.log('SignalR connection disconnected'); setTimeout(() => connect(), 2000); }); connection.on('updated', updatedStock => { console.log('Stock updated message received', updatedStock); const index = app.stocks.findIndex(s => s.id === updatedStock.id); console.log(`${updatedStock.symbol} Old price: ${app.stocks[index].price}, New price: ${updatedStock.price}`); app.stocks.splice(index, 1, updatedStock); }); connection.start().then(() => { console.log("SignalR connection established"); }); }; connect();
Open
./start/client/index.html
en plak de volgende code in plaats van de huidige DIV met de id van de app.<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.4/css/bulma.min.css" integrity="sha256-8B1OaG0zT7uYA572S2xOxWACq9NXYPQ+U5kHPV1bJN4=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous"> <title>Stock Notifications | Enable automatic updates in a web application using Azure Functions and SignalR</title> </head> <body> <div id="app" class="container"> <h1 class="title">Stocks</h1> <div id="stocks"> <div v-for="stock in stocks" class="stock"> <transition name="fade" mode="out-in"> <div class="list-item" :key="stock.price"> <div class="lead">{{ stock.symbol }}: ${{ stock.price }}</div> <div class="change">Change: <span :class="{ 'is-up': stock.changeDirection === '+', 'is-down': stock.changeDirection === '-' }"> {{ stock.changeDirection }}{{ stock.change }} </span> </div> </div> </transition> </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js" integrity="sha256-chlNFSVx3TdcQ2Xlw7SvnbLAavAQLO0Y/LBiWX04viY=" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.0/signalr.min.js"></script> <script src="bundle.js" type="text/javascript"></script> </body> </html>
Deze markering bevat een overgangselement, waarmee Vue.js een subtiele animatie kan uitvoeren wanneer de voorraadgegevens veranderen. Wanneer een voorraad wordt bijgewerkt, wordt de tegel lichter en vervolgens weer in de normale kleuren weergegeven. Op deze manier kunnen gebruikers eenvoudig zien welke voorraden zijn gewijzigd als de pagina vol staat met voorraadgegevens.
Voeg het volgende scriptblok toe net boven de verwijzing naar bundle.js om de SignalR SDK op te nemen.
<script src="https://cdn.jsdelivr.net/npm/@aspnet/signalr@1.0.3/dist/browser/signalr.js"></script>
De client .env bijwerken
Maak een omgevingsvariabelenbestand in de map met de
start/client
naam.env
.Voeg een variabele toe met de naam
BACKEND_URL
en voeg de waarde toe die u hebt gekopieerd uit les 5.BACKEND_URL=https://YOUR-FUNTIONS-APP-NAME.azurewebsites.net
Een Azure Static Web Apps-resource maken en client implementeren
Open Azure Portal om een nieuwe Azure Static Web Apps-resource te maken.
Gebruik de volgende informatie om het tabblad Basisinformatie voor het maken van resources te voltooien.
Naam Weergegeven als Abonnement Selecteer uw abonnement. Resourcegroep Gebruik de resourcegroep stock-prototype
.Naam van statische web-app Postpend uw naam aan client
. Bijvoorbeeld:client-jamie
.Type hostingabonnement Selecteer Gratis. Implementatiebron Selecteer GitHub. Organisatie Selecteer uw GitHub-account Opslagplaats Zoek en selecteer mslearn-advocates.azure-functions-and-signalr
.Vertakking Selecteer de hoofdbranch . Vooraf ingestelde instellingen bouwen Selecteer Vue.js. App-locatie Voer /start/client
in.API-locatie Leeg laten. Uitvoerlocatie Voer dist
in.Selecteer Voorbeeldwerkstroombestand om de implementatie-instellingen te controleren. De stap Bouwen en implementeren moet er als volgt uitzien:
- name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_123 }} repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) action: "upload" ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig app_location: "/solution/client" # App source code path api_location: "" # Api source code path - optional output_location: "dist" # Built app content directory - optional ###### End of Repository/Build Configurations ######
Selecteer Sluiten om de wijziging op te slaan.
Selecteer Beoordelen en maken en selecteer vervolgens Maken om de resource te maken. Wacht tot de implementatie is voltooid voordat u doorgaat.
Selecteer Ga naar de resource om de nieuwe Azure Static Web App-resource te openen.
Kopieer de URL-waarde op de pagina Overzicht. Dit is de basis-URL van de geïmplementeerde statische web-app.
De variabele BACKEND_URL toevoegen aan de opslagplaats
Voor de werkstroom moet de BACKEND_URL
omgevingsvariabele zijn ingesteld op de basis-URL van de geïmplementeerde Azure Functions-app vanaf les 5.
Selecteer in een browser voor uw GitHub-fork van de voorbeeldopslagplaats Instellingen - Beveiliging ->> Geheimen en variabelen -> Acties.
Selecteer Variabelen en selecteer vervolgens de variabele Nieuwe opslagplaats.
Gebruik de volgende tabel om de variabele te maken:
Naam Weergegeven als BACKEND_URL De basis-URL van de geïmplementeerde Azure Functions-app. De URL moet de indeling hebben van https://<FUNCTIONS-RESOURCE-NAME>.azurewebsites.net
Selecteer Variabele toevoegen om de variabele op te slaan in de opslagplaats.
GitHub-implementatiewerkstroom bewerken
Haal in de Visual Studio Code-terminal het nieuwe werkstroombestand op uit uw fork (oorsprong).
git pull origin main
Open het bestand
.github/workflows/azure-static-web-apps-*.yml
.Wijzig de
name
waarde boven aan het bestand inClient
.Bewerk de stap Bouwen en implementeren om de env-eigenschap voor de
BACKEND_URL
omgevingsvariabele toe te voegen.```yaml name: Client - Azure Static Web Apps CI/CD on: push: branches: - main pull_request: types: [opened, synchronize, reopened, closed] branches: - main jobs: build_and_deploy_job: if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') runs-on: ubuntu-latest name: Build and Deploy Job steps: - uses: actions/checkout@v3 with: submodules: true lfs: false #Debug only - Did GitHub action variable get into workflow correctly? - name: Echo run: | echo "BACKEND_URL: ${{ vars.BACKEND_URL }}" - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_123 }} repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) action: "upload" ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig app_location: "/solution/client" # App source code path api_location: "" # Api source code path - optional output_location: "dist" # Built app content directory - optional ###### End of Repository/Build Configurations ###### env: BACKEND_URL: ${{ vars.BACKEND_URL }} close_pull_request_job: if: github.event_name == 'pull_request' && github.event.action == 'closed' runs-on: ubuntu-latest name: Close Pull Request Job steps: - name: Close Pull Request id: closepullrequest uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_123 }} action: "close" ```
Sla de wijzigingen op en push deze naar de opslagplaats.
git add . git commit -m "Add BACKEND_URL environment variable" git push
Open het tabblad Acties in de GitHub-fork-opslagplaats om de implementatie te bekijken.
CORS bijwerken in de functie-app
Functie-apps staan standaard GEEN CORS-aanvragen toe. U moet de functie-app bijwerken om aanvragen van de statische web-app toe te staan.
Navigeer in Azure Portal naar de Azure Functions-app die in les 5 is gemaakt.
Selecteer API -> CORS in het menu aan de linkerkant.
Selecteer Access-Control-Allow-Credentials inschakelen.
Voeg de waarde toe die u hebt gekopieerd voor de RESOURCE-URL van Static Web Apps.
Eigenschappen Weergegeven als Toegestane oorsprongen De basis-URL van de geïmplementeerde statische web-app. Selecteer Opslaan om de CORS-instellingen op te slaan.
De implementatie van de client testen
- Gebruik in een browser de URL van de geïmplementeerde statische web-app om de client te openen.
- Open ontwikkelhulpprogramma's om de Console te bekijken om te zien wanneer de SignalR-gegevens voor bijgewerkte voorraad worden ontvangen. Houd er rekening mee dat dit geen HTTP-aanvragen zijn, dus u ziet ze niet op het tabblad Netwerk.
Gefeliciteerd U hebt uw voorraad-app verbeterd met SignalR.