Placeholder Image

Subtitles section Play video

  • Welcome to the second video in the Data Selfie App Project.

  • Thank you, Joey Lee, for this sample project.

  • I'm excited to keep building this with you who

  • are watching this right now.

  • So one of the things, one of the reasons for this project, one

  • of the things I'm excited to demonstrate to you

  • is what is this whole thing about client side and server

  • side programming.

  • If you watched the first video, all I did really

  • was make two files, Index.js, the JavaScript node

  • code to run on the server, and Index.html, the web page

  • that the server is hosting up to run on the client.

  • And this is one of the most confusing things

  • when you're first learning to program

  • and thinking about client side versus server side,

  • when do I want to do one or what goes on where.

  • So let's take a minute to dissect that a little bit here.

  • We have the file Index.js.

  • This is the server.

  • Only functionality on the server right

  • now is as follows, host static files.

  • The goal here is to build additional functionality, what

  • other kinds of things does the server need to do?

  • Save information to our database, for example,

  • retrieve information from the database

  • and pass it to the client, also.

  • But for right now, all it does is host static files

  • and the static file it happens to host

  • is Index.html living on the server.

  • What happens, the client connects to the server

  • and says, we'd like to request to view your website, your web

  • application.

  • And so with that request, Index.html

  • gets sent to the client.

  • Then it gets rendered in the client's browser.

  • If this Index.html happens to have JavaScript

  • files with it or references to other JavaScript files.

  • And, of course, there could be other media and other things

  • going along as well, that JavaScript is sent as raw text

  • and get executed here.

  • So the big difference, even though we might have JavaScript

  • in two places, we have JavaScript in Index.js,

  • we have JavaScript in index.html,

  • this JavaScript that's running on the server

  • is never seen by the client.

  • It has no ability to access this code, it can make a request.

  • This is a program that's running, the code is in it.

  • This is an important distinction because at some point,

  • when we start connecting to APIs,

  • as we might need to do some authentication.

  • So that's another thing that we want to do here on the server.

  • We said earlier save to database.

  • That's the thing that we can't do on the client.

  • The server has to take care of that.

  • Here's another thing.

  • Some APIs could authenticate from here,

  • like the JavaScript code could go here, execute

  • and connect to the API.

  • But then, whatever is in here is visible to the user.

  • You could do view source and see the JavaScript,

  • you could see the API keys there.

  • So this is an important point.

  • We may in most cases want to do authentication here

  • on the server.

  • So we're keeping track of a list of things

  • we want to do in the server and keeping track,

  • we don't really have a list of things

  • we want to do in the client.

  • In this particular video right now,

  • I don't want to add any of this functionality to the server.

  • I'm going to do that later.

  • What I want to do right now is add functionality

  • to the client.

  • So I'm adding JavaScript to Index.html.

  • Something that I can only do on the client is geolocate.

  • Geolocate.

  • Right?

  • The client is somewhere in the world.

  • There could be many of them.

  • That's another thing.

  • There's only one server, I'm writing the server,

  • there's only one Index.html file.

  • But that file can be sent to many different clients.

  • Those clients could geolocate themselves and then

  • send that data back to the server.

  • It's particularly confusing because when you're

  • practicing this and developing this,

  • remember I've got the server and the client running here

  • locally on my laptop, so they're both in one place.

  • Towards the end of this video series,

  • I'm going to show you how to take the server

  • and deploy it to the cloud, so to speak,

  • or a server that's somewhere else that many clients could

  • ultimately connect to.

  • So I'm just repeating a lot of the same stuff

  • over and over again.

  • So all we're going to do in this first step is figure out

  • how to geolocate where the client is, show the client

  • their latitude and longitude on their browser page,

  • and then we'll be ready for the next step, which

  • I'll do in the subsequent video to send

  • that information on the server and have the server save it

  • to a database.

  • One of the things that is available to you

  • if you're writing JavaScript for client side browsers

  • is the web API navigator.

  • So this interface, this Navigator interface

  • has information about the user agent, the identity,

  • the specific user itself.

  • Things like the user's language or at least

  • their language setting in the browser, their battery

  • about a battery left, yes.

  • There's a navigator and API functions for battery,

  • and geolocation is one of them.

  • So you can check out the Mozilla web docs

  • for all the different things you can access via the navigator

  • object.

  • The one I want to look at here is just geolocation.

  • So here I am on the geolocation API

  • page, which I can access with that navigator object.

  • One thing that's really key here is this little note.

  • This feature is available only in secure contexts HTTPS.

  • So this is quite true of several things.

  • For example, if your website is not hosted in a secure context

  • you may not be able to get access to a user's webcam.

  • That's another feature that we're going to add here.

  • And so this is something you really

  • need to be conscientious about.

  • For us right now developing locally on this laptop

  • the permissions are much more loose.

  • We're allowed to access geolocation, allowed

  • to access the camera on local host

  • because we haven't actually deployed anything to a real web

  • server where there's users besides ourselves just

  • playing around with it.

  • But this is definitely something going

  • to want to watch out for when you get to that deployment

  • stage.

  • The other thing to really be aware of is not

  • all-- not every browser that anybody might be using

  • on any operating system with any version

  • is going to have support for geolocation.

  • So the first thing you would always want to do in your code

  • is test to see if geolocation is even a thing that's available.

  • Luckily for us, the code for how to do that

  • is right here on the documentation page.

  • So I would consider retyping it, but it'll

  • be easy to just copy-paste.

  • So I'm going to take that, I'm going to go back

  • to the Index.html file.

  • I'm going to add to the body a script tag

  • so that I can put this code in here.

  • And I'm going to say console.log gelocation available,

  • and then console.log geolocation not available.

  • So at a minimum here, when I load the page,

  • I should see one or the other of those messages.

  • And geolocation is available.

  • Fantastic.

  • So if geolocation is available, then I

  • can choose to take the next step and geolocate.

  • The way that I do that is by calling to getCurrentPosition

  • function.

  • And the getCurrentPosition function

  • requires me to pass in a callback function that

  • is executed when the position is ready to be retrieved.

  • That's a bit of a mouthful, but we

  • can copy-paste the code that's here on the documentation page

  • and then unpack that a little bit.

  • So let's go to our code.

  • If it's available, I want to put this here,

  • so let's look at this.

  • Navigator.geoloc ation.getCurrentPosition.

  • That's really the function I'm calling.

  • I can take all of this out.

  • This is what we're calling right here.

  • The issue is, we need to give it a callback, right?

  • This is going to happen asynchronously.

  • So only when it's ready to grab that latitude-longitude,

  • this function will get called.

  • I don't need this do something here.

  • This is a nice little--

  • it's implying the documentation is implying now

  • you do something with that.

  • All I wanted it to do to see that this works is actually

  • console log this out.

  • So I'm going to say console log, position coordinates latitude,

  • and console log position coordinates longitude.

  • Get the current position.

  • When it's ready, call this callback passive position

  • and console log in.

  • I am trying to do this series about building these projects

  • using updated ES6 syntax.

  • There's a variety of different versions of JavaScript.

  • Yes, this is actually from quite a while ago.

  • I have a bunch of videos about different versions

  • of JavaScript, but what I mean here

  • specifically is I want to use the arrow syntax.

  • So what I can actually do is eliminate this function key

  • word and just say position arrow into these two lines of code.

  • So this is a nice way of writing saying,

  • let's get the current position when it's ready,

  • console log it.

  • And in fact, I'm just going to say console--

  • I'm going to simplify this even further.

  • Just going to say console.log position.coordinates, OK?

  • Because I want to look at the full

  • object to see what's in there.

  • Oh, I want to look at position.

  • I want to look at everything.

  • So let's do that.

  • Let's see what happens.

  • So I'm going to go back here and hit refresh.

  • Now look at this.

  • This is really important.

  • Localhost 3000, that's the URL present for my website,

  • it's just localhost, I'm just developing locally.

  • If you had deployed this somewhere

  • and your website was DataSelfieApp.com,

  • it would say DataSelfieApp.com wants to, what?

  • Know your location.

  • So, of course, of course, of course

  • this is something that the user has to opt into, right?

  • You can't just secretly behind the scenes

  • log users location without them saying yes, this is OK.

  • So not only does the website have

  • to be secure, so that information is transferred

  • securely, but it also has to be explicitly allowed by the user.

  • This might be different if you were

  • doing geolocation within an app itself because maybe

  • the user by purchasing the app or maybe the user

  • by downloading the app and through system settings

  • has already oft opted into that app using location,

  • but just on a website itself the user is going to say allow.

  • So I'm going to say allow.

  • And then--

  • [CHUCKLES]

  • Boy, that took a while.

  • Took a while.

  • So you could see that for it to figure out,

  • for it to do the location, that takes a while.

  • How is it doing the location?

  • This is this laptop.

  • It didn't have a GPS in it.

  • Let's look and see what's in here, first of all.

  • So we have coordinates, we have timestamp.

  • Coordinates have accuracy, altitude, possible heading,

  • latitude, longitude, speed.

  • So there's a lot of extra information

  • here that you might get if you were doing this on mobile.

  • So that would be excellent.

  • We'll pause this video, try to make

  • this run in a mobile browser, then

  • see what else you get there.

  • And what I'm looking for, of course,

  • is just the latitude and longitude.

  • Now, just out of curiosity, let's see where I

  • am and see how accurate it got.

  • Looks like it got it exactly right.

  • So this is not where the International Space Station is,

  • but this is exactly the code from my International Space

  • Station example.

  • I just hard-coded in the latitude and longitude

  • that I got from geolocating myself,

  • and then there I am, right here in New York City on Broadway

  • between Washington Place and Wimberley Place

  • at the Tisch School of the Arts.

  • That's exactly where I am.

  • So it works.

  • Most likely, my guess, my assumption,

  • is that it's able to locate me by the IP address

  • where I'm connected to the NYU Wi-Fi

  • and the NYU Wi-Fi, that IP address,

  • is registered to this particular address

  • at Tisch School of the Arts.

  • But if I'm opening this on a mobile device,

  • I would most likely get that latitute

  • and longitude the GPS itself.

  • A good exercise could then be to add the Leaflet.js code right

  • here and actually have the browser geolocate

  • and then show the user where it thinks they are.

  • But I'm going to do something much simpler because really

  • what I want to do is get to sending

  • that data to the server.

  • This is the heart of this particular module

  • of this series, which is how to communicate data that's

  • extracted in the client, send it to the server,

  • and save it to the database.

  • So in many ways we're done, but let's at least

  • add that latitude and longitude to the web page

  • itself so we can see it in the Dom.

  • Let's add a couple of Dom elements.

  • For example, I'll just say latitude,

  • I'll make a span, latitude, and that'll be empty.

  • And then I'll add a break and say the same exact thing,

  • but longitude.

  • Let me also add the degree symbol, which

  • I can do by just saying & deg semicolon,

  • and the same exact thing down here.

  • & deg semicolon.

  • So now if I refresh the page here, there we go.

  • Latitude and longitude are blank.

  • It's got the position there, let's pull out the latitude,

  • position.coodinates.latitude and then I

  • can say document.getElementByID.

  • The ID is latitude, and then I can

  • say text content equals that latitude,

  • and I can do the same thing with the longitude.

  • I'm having serious case of deja-vu here

  • because we did a lot of this kind of idea

  • in the previous video.

  • And then I can put that here.

  • And now we are ready to go.

  • Now I can refresh the page and there we go.

  • We see the latitude and longitude

  • right there in the browser itself.

  • There you have it.

  • Now we're done with step two.

  • We have data that we have acquired from the navigator

  • geolocation API on the client.

  • We have a server that is hosting the code that is being

  • sent to the client to run.

  • The next step is for that information

  • once it's retrieved on the client

  • to be sent back to the server and saved in a database.

  • And the way that's going to happen

  • is through a POST request.

  • In previous videos, I have covered the Fetch function

  • extensively and looking at how to do a get request,

  • how to retrieve data using Fetch.

  • It makes sense, Fetch kind of implies fetch, retrieve, get.

  • But it so happens that the fetch function can also

  • be used to send data by making it instead of a Get a POST.

  • I can fetch a POST, I can POST a Fetch.

  • Who knows what the lingo means, but I can send data

  • from the client to the server.

  • That'll be the next step.

  • Then after that, we'll save the status of the database

  • that gets sent, and more and more and more.

  • Before you move on to the next video,

  • I might suggest just playing around with the client code,

  • add the map with Leaflet, think about maybe a more elegant

  • interaction, maybe there should be a button the user

  • presses to retrieve the current latitude and longitude,

  • try it on a mobile device.

  • There's a bunch of things you could try.

  • Let me know how that goes in the comments,

  • and I'll see you in the next step.

  • Thanks for watching.

  • [MUSIC PLAYING]

Welcome to the second video in the Data Selfie App Project.

Subtitles and vocabulary

Click the word to look it up Click the word to find further inforamtion about it