In het vorige deel van deze serie zagen we hoe aan de slag te gaan met Eve, een Python REST API-framework, en een aantal API's te maken. In dit deel van de serie maken we gebruik van die API's om een toepassing te maken die mogelijk wordt gemaakt door Node.js en AngularJS.
We zullen de aanmeldingsfunctionaliteit implementeren met behulp van Node.js en andere functionaliteiten toevoegen door de REST API's van AngularJS aan te roepen.
Om te beginnen, kloont u de broncode van de vorige zelfstudie en voert u de API's uit.
git clone https://github.com/jay3dec/REST_API_EVE_Part-1
Nadat je de broncode hebt gekloond, zorg je ervoor dat MongoDB actief is. Navigeer naar de REST_API_EVE_Part-1
map en voer de app uit:
cd REST_API_EVE_Part-1 python app.py
Nu moet je je API laten draaien op http: // localhost: 5000 /.
Maak een projectmap met de naam AngularNodeApp
. We gebruiken Express, een minimalistisch webtoepassingsraamwerk voor het maken van Node.js-toepassingen. Dus laten we installeren uitdrukken
in ons project.
npm install express
Een keer uitdrukken
is geïnstalleerd, maak een bestand aan met de naam app.js
. Binnen app.js
we zullen onze uitdrukkelijke applicatie maken en de routes voor de applicatie definiëren.
Laten we beginnen met het importeren van express in app.js
en een express-app maken.
var express = require ('express'), app = express (); app.get ('/', functie (req, res) res.send ('welcome !!');); app.listen (3000)
We hebben zojuist een uitdrukkelijke app gemaakt en een route gedefinieerd, /
, die zal terugkeren Welkom
wanneer gevraagd. Start de server.
knooppunt app.js
Richt uw browser op http: // localhost: 3000 / en u zou het bericht moeten hebben Welkom !!
.
Laten we een startpagina maken voor onze applicatie. Navigeer naar de projectmap en maak een nieuwe map met de naam openbaar
. Binnen public / index
maak een bestand aan met de naam index.html
. Voeg de volgende HTML-code toe aan index.html
.
Angular Node App Angular Node App
Angular Node App
Schrijf je vandaag in
Laten we vervolgens het bestaande aanpassen /
verzoek handler om te laten zien index.html
. Bepaal het pad naar de openbaar
map in app.js
.
app.use (express.static (__ dirname + '/ public'));
Wijzig de /
aanvraag handler zoals getoond:
app.get ('/', functie (req, res) res.sendFile ('index.html', 'root': __dirname + '/ public / index'););
Sla de wijzigingen op en start de server opnieuw op. Richt uw browser op http: // localhost: 3000 / en u zou de applicatiepagina kunnen zien.
Maak vervolgens een pagina met de naam signin / signin.html
en voeg de volgende HTML-code toe:
Python Flask Bucket Lijst App Python Flask-app
Bucketlijst-app
In app.js
voeg een verzoekbehandelaar toe die is genoemd /Aanmelden
welke de signin.html
pagina.
app.get ('/ signIn', functie (req, res) res.sendFile ('signin.html', 'root': __dirname + '/ public / signin'););
Voeg ook een toe signup.html
naar de public / aanmelden
map met de volgende HTML-code:
Python Flask Bucket Lijst App Python Flask-app
Bucketlijst-app
Voeg een verzoekbehandelaar toe met de naam inschrijven
in app.js
.
app.get ('/ signUp', functie (req, res) res.sendFile ('signup.html', 'root': __dirname + '/ public / signup'););
Sla de wijzigingen op en start de server opnieuw op. Richt uw browser op http: // localhost: 3000 en u zou de applicatie moeten laten draaien. Klik op de inlog- en aanmeldingskoppelingen op de pagina en de respectieve pagina's moeten worden weergegeven.
Om de aanmeldingsfunctionaliteit te implementeren, bellen we de Python Eve REST API. We zullen deze API vanuit het Node.js
back-end omdat het vereist dat de gebruikersnaam en het wachtwoord van de serviceverificatie worden doorgegeven. Dus om te voorkomen dat de gebruikersnaam en het wachtwoord van de authenticatie van de scripts worden blootgesteld, maken we deze call Node.js
.
Laten we eerst een maken registreren
aanvraag handler om de sign-up functionaliteit af te handelen.
app.post ('/ register', functie (req, resp) // Code is hier);
We zullen vereisen body-parser
om de gegevens gepost van het formulier te ontleden. Installeren body-parser
met behulp van NPM-pakketbeheerder.
npm body-parser installeren
Een keer body-parser
is geïnstalleerd, binnenin nodig app.js
.
bodyParser = require ('body-parser')
Gebruiken body-parser
om de geposte formuliergegevens te ontleden, moeten we deze in onze app gebruiken.
app.use (bodyParser.urlencoded (extended: true));
Binnen in de /registreren
handler we kunnen de formuliergegevens ontleden zoals getoond:
var _firstName = req.body.inputFirstName; var _lastName = req.body.inputLastName; var _username = req.body.inputUsername; var _password = req.body.inputPassword; var _phone = req.body.inputPhone;
We zullen gebruiken verzoek
om de oproep naar de Eve API's te maken. Dus installeer verzoek in de applicatie.
npm installatie verzoek
Vereisen verzoek
in app.py
.
request = require ('request')
Maak de opties voor het aanroepen van de API zoals getoond:
var options = url: 'http://127.0.0.1:5000/user/', methode: 'POST', auth: user: 'admin', password: 'admin', formData: firstname: _firstName, achternaam: _lastName, gebruikersnaam: _username, wachtwoord: _password, telefoon: _phone
We hebben de details voor de POST
verzoek in de opties. admin_username
en administrator wachtwoord
zijn de gebruikersnaam en het wachtwoord voor verificatie vereist om toegang te krijgen tot de API voor het maken van Eve-gebruikers.
Laten we vervolgens gebruiken verzoek
om te bellen.
request (opties, functie (err, res, body) if (err) console.log (err); return; console.log ('Response:', res) console.log ('Retourgegeven gegevens:', body ))
Sla de wijzigingen op en start de server opnieuw op. Richt uw browser op http: // localhost: 3000 en navigeer naar het aanmeldingsscherm. Voer de details in en klik op de aanmeldknop. Controleer het terminalvenster op de respons en gebruikerscreatie details die zijn geretourneerd door de API-aanroep.
Wanneer een fout optreedt tijdens het aanmeldingsproces, zullen we het foutbericht doorgeven aan de aanmeldingspagina. We gebruiken een template-engine genaamd EJS. Laten we eerst EJS installeren.
npm installeer ejs
Eenmaal klaar met de installatie van EJS
, voeg de volgende regel code toe om de view-map en de view-engine in te stellen.
var path = require ('path'); app.set ('views', path.join (__ dirname + '/ public / signup')); app.set ('view engine', 'ejs');
Hernoem signup.html naar signup.ejs
en voeg een reeks toe om een fout weer te geven na de verzendknop.
<%= error %>
Wijzig ook de inschrijven
behandelaar aanvragen.
app.get ('/ signUp', functie (req, res) res.render ('signup', error: "));
Vervolgens, als er een fout optreedt in het aanmeldingsantwoord, geven we dit door aan de aanmeldingspagina. Als het aanmeldingsproces geen fout retourneert, leiden we de gebruiker door naar de inlogpagina.
request (opties, functie (err, res, body) if (err) return resp.render ('signup', error: err) var result = JSON.parse (body) if (result._status == 'ERR') if (result._error.code == '400') return resp.render ('signup', error: 'Username Already Exist!') Retest resp.render ('signup', error: result._issues.username) else console.log ('All good'); resp.redirect ('/ signIn');)
Sla alle wijzigingen op en start de server opnieuw op. Richt uw browser op http: // localhost: 3000 / signUp en probeer u te registreren met een bestaande gebruikersnaam. Aangezien de gebruikersnaam al bestaat, zou u een foutmelding moeten krijgen.
AngularJS biedt een service genaamd $ http die helpt bij het maken van REST API-aanroepen. Van de AngularJS-documenten,
De$ http
service is een core Angular-service die communicatie met de externe HTTP-servers mogelijk maakt via het XMLHttpRequest-object van de browser of via JSONP.
Kopieer de inhoud van het lichaam van index.html
en maak een nieuw bestand met de naam public / home / home.html
.
Angular Node App
Angular Node App
Schrijf je vandaag in
Maak in de basismap een bestand met de naam home.js
en definieer de huis
module en routes config zoals getoond:
'gebruik strikt'; angular.module ('home', ['ngRoute']) .config (['$ routeProvider', function ($ routeProvider) $ routeProvider.when ('/ home', templateUrl: '... /home/home.html ', controller:' HomeCtrl ');]) .controller (' HomeCtrl ', [function () ]);
Vervang op dezelfde manier de HTML-code van signin.html
met de inhoud van het lichaam van signin.html
. We verwerken routering van inlogpagina's via de AngularJS-app.
Binnen in de aanmelden
map, maak een bestand aan met de naam signin.js
en voeg de volgende route-configuratiegegevens toe.
'gebruik strikt'; angular.module ('signin', ['base64', 'ngRoute', 'myAppService']) .config (['$ routeProvider', function ($ routeProvider) $ routeProvider.when ('/ signin', templateUrl: '... /signin/signin.html', controller: 'SignInCtrl');])
In index.html
we zullen gebruiken ngView
en route de AngularJS applicatieaanzichten. Hier is hoe index.html
zal kijken:
Angular Node App
Binnen in de inhoudsopgave
map, maak een bestand aan met de naam index.js
welke als het rootbestand zal dienen. In index.js
we injecteren de verschillende modules die zijn gemaakt in de myApp
app. Hier is de index.js
het dossier:
angular.module ('myApp', ['ngRoute', 'home', 'signin']). config (['$ routProvider', function ($ routeProvider) $ routeProvider.otherwise (redirectTo: '/ home');]);
Installeren hoekig-route
gebruik van prieel en voeg de referentie toe in index.html
.
prieel installeer hoekige route
We moeten ook de gebruikersnaam en het wachtwoord converteren naar base64
, dus installeer hoekig-base64
.
prieel installeren angular-base64
Voeg na installatie een verwijzing toe naar hoekig-base64
in index.html
.
Stel het statische pad in op bower_components
in app.js
.
app.use ('/ bower_components', express.static (__ dirname + '/ bower_components'));
Binnen signin.js
, laten we een controller maken genaamd SignInCtrl
.
'gebruik strikt'; angular.module ('signin', ['base64', 'ngRoute']) .config (['$ routeProvider', function ($ routeProvider) $ routeProvider.when ('/ signin', templateUrl: '... / aanmelden /signin.html ', controller:' SignInCtrl ');]) .controller (' SignInCtrl ', [' $ scope ',' $ http ',' $ base64 ', function ($ scope, $ http, $ base64 ) ]);
We hebben zojuist een controller gemaakt met de naam SignInCtrl
in signin.js
. We hebben de base64
module voor de SignInCtrl
.
Klik op Aanmeldknop en we bellen het bovenstaande aanmelden
functie om de gebruiker te authenticeren. Dus laten we eerst de ngModel
naar het veld gebruikersnaam en wachtwoord op de inlogpagina.
Voeg de toe ngClick
naar de knop Aanmelden in signin.html
.
Binnen in de aanmelden
functie lees de gebruikersnaam en het wachtwoord van $ scope
. Zodra we de gebruikersnaam en het wachtwoord hebben, maken we de base64
string gebruiken hoekig-base64
.
$ scope.signIn = function () var gebruikersnaam = $ scope.username; var wachtwoord = $ scope.password; var authdata = $ base64.encode (gebruikersnaam + ':' + wachtwoord);
Voordat we de REST API's bellen, moeten we de benodigde headers instellen. We moeten de Access-Control-Request-Headers
en Access-Control-Expose-Headers
.
$ http.defaults.headers.common = "Access-Control-Request-Headers": "accept, origin, authorization"; $ http.defaults.headers.common = "Access-Control-Expose-Headers": "Origin, X-Requested-With, Content-Type, Accept"; $ http.defaults.headers.common ["Cache-Control"] = "geen cache"; $ http.defaults.headers.common.Pragma = "no-cache";
We moeten ook de machtiging
koptekst in de $ http
. De ... gebruiken base64
authData
gemaakt met gebruikersnaam
en wachtwoord
, stel de autorisatieheader in.
$ http.defaults.headers.common ['Autorisatie'] = 'Basic' + authdata;
Maak vervolgens de $ http
Krijg een oproep naar de Python Eve REST API's.
$ http (methode: 'GET', url: 'http://127.0.0.1:5000/user/' + gebruikersnaam). success (functie (data, status, headers, config) console.log (data);). error (functie (data, status, headers, config) console.log (data, status););
Sla alle wijzigingen op en start de server opnieuw op. Richt uw browser op http: // localhost: 3000 / signin. Probeer in te loggen met een geldige gebruikersnaam en wachtwoord. Controleer de browserconsole en je zou de gebruikersgegevens moeten hebben. Als de authenticatie mislukt, zou u een authenticatiefoutfout moeten hebben.
In deze zelfstudie hebben we gezien hoe we de REST-API's die in de vorige zelfstudie zijn gemaakt, kunnen gebruiken in onze angularjs
en Node.js
app. We hebben de inlog- en aanmeldfunctionaliteit geïmplementeerd in deze zelfstudie.
In het volgende deel van deze serie gebruiken we de andere API's om onze AngularJS-app te voltooien.
Broncode van deze tutorial is beschikbaar op GitHub.