联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> Java编程Java编程

日期:2019-11-07 09:41

Homework 8: Ajax, JSON, Responsive Design and Node.js

Weather Search

(AJAX/JSON/HTML5/Bootstrap/Angular/Node.js/Cloud Exercise)

1. Objectives

• Get familiar with the AJAX and JSON technologies.

• Use a combination of HTML5, Bootstrap, and Angular on client side.

• Learn to use JavaScript / Node.js on server side.

• Get familiar with Bootstrap to enhance the user experience using responsive design.

• Get hands-on experience of Amazon Web Services/Google Cloud App Engine/Microsoft

Azure.

• Learn to use APIs such as Forecast.io API, Google Customized Search API and Twitter

API.

2. Background

2.1 AJAX and JSON

AJAX (Asynchronous JavaScript + XML) incorporates several technologies:

• Standards-based presentation using XHTML and CSS;

• Result display and interaction using the Document Object Model (DOM);

• Data interchange and manipulation using XML and JSON;

• Asynchronous data retrieval using XMLHttpRequest;

• JavaScript binding everything together.

See the class slides at https://csci571.com/slides/ajax.pdf

JSON, short for JavaScript Object Notation, is a lightweight data interchange format. Its main

application is in AJAX web application programming, where it serves as an alternative to the use

of the XML format for data exchange between client and server. See the class slides at:

https://csci571.com/slides/JSON1.pdf

2.2 Bootstrap

Bootstrap is a free collection of tools for creating responsive websites and web applications. It

contains HTML and CSS-based design templates for typography, forms, buttons, navigation and

other interface components, as well as optional JavaScript extensions. To learn more details about

Bootstrap please refer to the lecture material on Responsive Web Design (RWD). Please use

Bootstrap 4 in this homework. See the class slides at:

https://csci571.com/slides/Responsive.pdf

2

2.3 Amazon Web Services (AWS)

AWS is Amazon’s implementation of cloud computing. Included in AWS is Amazon Elastic

Compute Cloud (EC2), which delivers scalable, pay-as-you-go compute capacity in the cloud,

and AWS Elastic Beanstalk, an even easier way to quickly deploy and manage applications in

the AWS cloud. You simply upload your application, and Elastic Beanstalk automatically

handles the deployment details of capacity provisioning, load balancing, auto-scaling, and

application health monitoring. Elastic Beanstalk is built using familiar software stacks such as

the Apache HTTP Server, PHP, and Python, Passenger for Ruby, IIS for .NET, and Apache

Tomcat for Java.

To learn more about AWS support for Node.js visit this page:

https://aws.amazon.com/getting-started/projects/deploy-nodejs-web-app/

2.4 Google App Engine (GAE)

Google App Engine applications are easy to create, easy to maintain, and easy to scale as your

traffic and data storage needs change. With App Engine, there are no servers to maintain. You

simply upload your application and it’s ready to go. App Engine applications automatically scale

based on incoming traffic. Load balancing, micro services, authorization, SQL and noSQL

databases, memcache, traffic splitting, logging, search, versioning, roll out and roll backs, and

security scanning are all supported natively and are highly customizable.

To learn more about GAE support for Node.js visit this page:

https://cloud.google.com/appengine/docs/flexible/Node.js/

2.5 Microsoft Azure

Microsoft Azure is a cloud computing service created by Microsoft for building, testing,

deploying, and managing applications and services through a global network of Microsoftmanaged

data centers. It provides software as a service (SaaS), platform as a service (PaaS) and

infrastructure as a service (IaaS) and supports many different programming languages, tools and

frameworks, including both Microsoft-specific and third-party software and systems.

To learn more about Azure support for Node.js visit this page:

https://docs.microsoft.com/en-us/javascript/azure/?view=azure-node-latest

2.6 Angular

Angular is a toolset for building the framework most suited to your application development. It is

fully extensible and works well with other libraries. Every feature can be modified or replaced to

suit your unique development workflow and feature needs. Angular combines declarative

templates, dependency injection, end to end tooling, and integrated best practices to solve

development challenges. Angular empowers developers to build applications that live on the

web, mobile, or the desktop.

3

For this homework, Angular 2+ (Angular 2,4,5,6 or 7) can be used, but Angular 7 is

recommended. However, please note Angular 2+ will be a little more difficult to learn if the

developer is not familiar with Typescript and component-based programming.

To learn more about Angular 2+, visit this page:

https://angular.io/

Note: AngularJS cannot be used in this project.

2.7 Node.js

Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an eventdriven,

non-blocking I/O model that makes it lightweight and efficient. Node.js package

ecosystem, npm, is the largest ecosystem of open source libraries in the world.

To learn more about Node.js, visit:

https://Node.js.org/en/

Also, Express.js is strongly recommended. Express.js is a minimal and flexible Node.js web

application framework that provides a robust set of features for web and mobile applications. It is

in fact the standard server framework for Node.js.

To learn more about Express.js, visit:

http://expressjs.com/

Note: In this document when you see GAE/AWS/Azure it means that you can either use Google

App Engine, Amazon Web Services or Microsoft Azure Services.

The only way to implement the client side: Use entirely Angular2+

All APIs calls should be done through your Node.JS server, except call to the ip-api.

4

3. High Level Description

In this exercise you will create a webpage that allows users to search for weather information using

the Forecast.io API and display the results on the same page below the form.

The user provides the location information such as Street address, City and State for which they

would want to find the detailed weather information or provide their current location.

Once the user has provided the data and clicks on the Search button, validation must be done to

check that the entered data is valid. Once the validation is successful, 3 tabs should be displayed.

The 3 tabs correspond to Current tab, Hourly tab and Weekly tab.

Your webpage should also support adding cities to and removing cities from the Favorites tab and

sharing the weather info with Twitter. All the implementation details and requirements will be

explained in the following sections.

When a user initially opens your webpage, your page should look like Figure 1.

Figure .1 Initial Search Form

3.1 Search Form

3.1.1 Design

You must replicate the search form displayed in Figure 1 using a Bootstrap form. The form

fields are similar to Homework #6.

There are 3 fields in the search form which are required if the Current Location is not

checked:

5

1. Street: Initially, please show the placeholder shown in the picture.

2. City: This input field should support autocomplete which is explained in section 3.1.2.

Please note that the user does not necessarily chooses what suggested by the

autocomplete. Initially, please show the placeholder shown in the picture.

3. State: There are multiple options for the user to select from which contain all the States

of US.

Figure 2. State Options

The search form has two buttons:

1. Search: The “Search” button should be disabled whenever either of the required fields is

empty or validation fails, or the user location is not obtained yet. Please refer to section

3.1.3 for details of validation. Please refer to section 3.1.4 for details of obtaining user

location.

2. Clear: This button must reset the form fields, clear all validation errors if present, switch

the view to the results tab and clear the results area.

3.1.2 AutoComplete

Autocomplete for Cites is implemented by using the Place Autocomplete service provided by

Google. Please go to this page to learn more about this service:

https://developers.google.com/places/web-service/autocomplete

6

An example of an HTTP request to the Places Autocomplete API Get Suggestion that searches

for the city textfield “Los” is shown below:

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=LOS&types=(cities)&lan

guage=en&key=[Your_API_Key]

To get the API key in the above URL:

1. Please follow the steps provided in the following link:

https://developers.google.com/places/web-service/get-api-key

Note:

1. Set the type to cities to provide suggestions for cities.

2. Set the language to en for specifying that the language is English.

3. If the API doesn’t work, hide the autocomplete feature. This situation should be

handled and not throw any error.

The response is a JSON object similar to the one shown in Figure 3.

7

Figure 3. Autocomplete JSON Response

The fields to get the suggested options are highlighted in red in the JSON response above.

For reference: The value is provided by the key main_text in the structured_formatting object in

the predictions array.

You must use Angular Material to implement the Autocomplete. (See section 6.4).

8

Figure 4. Autocomplete example

Note: Restrict the number of options in the “autocomplete” suggestion to 5.

3.1.3 Validation

Your application should check if the “Street” and “City” edit boxes contain something other than

spaces or blank. If not, then it’s invalid and an error message should be shown as in Figure 5.

If the Current Location checkbox is checked, then the Street, City and the State controls should be

disabled with their values retained.

Please watch the reference video carefully to understand the validation.

9

Figure 5. An Invalid Form

3.1.4 Obtaining User Location

As in Homework #6, you should obtain the current user location using one of the geolocation

APIs. The usage of this API has been explained in the Homework #6 documents.

http://ip-api.com/json

3.1.5 Search Execution

Once the validation is successful and the user clicks on “Search” button, your application should

make an AJAX call to the Node.js script hosted on GAE/AWS/Azure. The Node.js script on

GAE/AWS/Azure will then make a request to forecast.io API to get the weather information. This

will be explained in the next section.

3.2 Results Tab

The results should be displayed below the form as shown in Figure 6. You are supposed to

display the results in a responsive mode compatible with mobile devices. If the page is loading

on a smart phone or a tablet, the display should be modified according to the width and height of

the devices.

In this section, we outline how to use the form inputs to construct HTTP requests to the Google

geocode API and DarkSky API services and display the result in the webpage.

The Google geocode API call looks like this:

https://maps.googleapis.com/maps/api/geocode/json?address=[STREET, CITY,

STATE]&key=[YOUR_API_KEY]

Note:

1. We use JSON response to get the latitude and longitude from the Google geocode API.

2. Please refer to the Homework 6 documentation to get the Google geocode API key.

Once the latitude and longitude are fetched from the Current Location or the Google geocode

API, it has to be passed to the DarkSky API to fetch the weather details.

The DarkSky API is documented here:

https://darksky.net/dev/docs

The usage of these two APIs has been explained in the Homework #6 documents.

An example of an HTTP request to the DarkSky API that searches for the weather information

from the user’s current location or the location provided by the user is shown below:

https://api.darksky.net/forecast/[key]/[latitude],[longitude]

10

Note: Important changes in the URL from Homework 6

1. No need to exclude any parameters. Call the API as given above.

The Node.js script should pass the JSON object returned by the API to the client side or parse the

returned JSON and extract useful fields and pass these fields to the client side in JSON format.

You should use TypeScript to parse the JSON object and display the results using 3 tabs. A sample

output is shown in Figure 6. See the tabs on upper left.

The display of the results is divided into 3 tabs, i.e. Current tab, Hourly tab and Weekly tab. The

detailed description of all the tabs is given in the following sections.

3.2.1 Current Tab

This tab is in a card layout which provides the details of the Current weather for that day at the

corresponding location provided by the user.

Figure 6. An Example of a Valid Search result

When the search result contains at least one record, you need to map the data extracted from the

API results to the card layout to render the HTML result as shown in Figure 6.

11

Figure 7. Card view of Current Weather with Tooltip

On hovering the icons, a tooltip should be displayed for that corresponding icon, please use

Angular Material or bootstrap tooltip to implement this. The style between bootstrap tooltip and

Angular Material tooltip will be a slightly different, but both are fine. (See section 6.3 and 6.4)

The details for the Card are from the corresponding JSON structure:

Figure 8: Sample JSON-formatted object returned from Forecast.io API call for the card layout

12

Table Column Data from result of Forecast.io API call

City The value of the city can be taken from the input

form if the user provides the address or from ipapi

to get current location.

Timezone The value of the key “timezone”.

Temperature The value of the key “temperature” in the

currently object. You should display the value

with a degree sign and F to indicate temperature

in Fahrenheit. For the degree sign use this image

- https://cdn3.iconfinder.com/data/icons/virtualnotebook/16/button_shape_oval-512.png

Summary The value of “summary” in the currently object.

Humidity The value of “humidity” in the currently object.

It should also be provided with the

corresponding icon -

https://cdn2.iconfinder.com/data/icons/weather-

74/24/weather-16-512.png

Pressure The value of “pressure” in the currently object.

It should also be provided with the

corresponding icon -

https://cdn2.iconfinder.com/data/icons/weather-

74/24/weather-25-512.png

Wind Speed The value of “windSpeed” in the currently

object. It should also be provided with the

corresponding icon for it -

https://cdn2.iconfinder.com/data/icons/weather-

74/24/weather-27-512.png

Visibility The value of “visibility” in the currently object.

It should also be provided with the

corresponding icon for it -

https://cdn2.iconfinder.com/data/icons/weather-

74/24/weather-30-512.png

CloudCover The value of “cloudCover” in the currently

object. It should also be provided with the

corresponding icon -

https://cdn2.iconfinder.com/data/icons/weather-

74/24/weather-28-512.png

13

Ozone The value of “ozone” in the currently object. It

should also be provided with the corresponding

icon for it -

https://cdn2.iconfinder.com/data/icons/weather-

74/24/weather-24-512.png

Table 1: Mapping the result from DarkSky API into card layout

The state seal provided in the card is provided by the Google Custom Search API.

The Google Custom Search Engine is documented at:

https://developers.google.com/custom-search/json-api/v1/overview

To retrieve a photo of the State Seal, the request needs 6 parameters (output should be JSON):

• q: The search expression

• cx: The custom search engine ID to use for this request.

• imgSize: Returns images of a specified size.

• num: Number of search results to return. (Valid values are integers between 1 and 10,

inclusive.). Please specify 1.

• searchType: Specifies the search type: image. If unspecified, results are limited to

webpages.

• key: Your application's API key. This key identifies your application for purposes of

quota management.

An example of an HTTP request to the Google custom search API is shown below:

https://www.googleapis.com/customsearch/v1?q=[STATE]%20State%20Seal&cx==[YOUR_SE

ARCH_ENGINE_ID]&imgSize=huge&imgType=news&num=1&searchType=image&key=[Y

OUR_API_KEY]

14

The JSON response from the Google Custom Search:

Figure 8. Google Custom Search API response

When the search result contains at least one record, you need to map the data extracted from the

API results to the seal symbol.

State Seal in Card API service response

State Seal You should display 1 photo, which is present in

“link” attribute inside the ‘items’ array.

Table 2: Mapping the result from Google Custom Search API

Note: If any value is 0 or missing in the first card please do not display them.

3.2.2 Hourly Tab

This tab provides a bar chart for all the parameters of the weather. There are 6 parameters:

1. Temperature (Fahrenheit) vs Time (Hourly).

2. Pressure (Millibars) vs Time (Hourly).

15

3. Humidity (%) vs Time (Hourly).

4. Ozone (Dobson Units) vs Time (Hourly).

5. Visibility (Miles) vs Time (Hourly).

6. Wind Speed (Miles per hour) vs Time (Hourly).

Figure 9 Hourly tab with Temperature vs Time bar chart

There are 6 charts corresponding to the parameter, which is provided by the dropdown menu.

Figure 10. Dropdown for the type of Parameters

16

The hourly details for the chart are provided by the DarkSky API. The following JSON structure

provides the data:

Figure 11: A sample JSON response from DarkSky API to get the hourly data.

17

Bar Chart Data from result of Forecast.io API call

Temperature vs Time The value of the key “temperature” in the data

array present in the hourly object.

Pressure vs Time The value of the key “pressure” in the data array

present in the hourly object.

Humidity vs Time The value of the key “humidity” in the data array

present in the hourly object.

Ozone vs Time The value of the key “ozone” in the data array

present in the hourly object.

Visibility vs Time The value of the key “visibility” in the data array

present in the hourly object.

Wind Speed vs Time The value of the key “windSpeed” in the data

array present in the hourly object.

Table 3: Mapping the result from DarkSky API to get hourly data for charts

Note: Please take the first 24 values from the data array since it provides hourly data for the next

48 hrs.

The bar chart should be implemented with the help of Chart.js:

1. https://www.chartjs.org/docs/latest/charts/bar.html

2. https://medium.com/codingthesmartway-com-blog/angular-chart-js-with-ng2-chartse21c8262777f

18

3.2.3 Weekly Tab

This tab provides a range bar chart of the minimum and maximum temperature for the next 7

days in the week.

Figure 12: The Weekly tab which provides a chart for temperature range for next 7 days in the

week.

19

This JSON response provides the necessary weekly data:

Figure 13: A sample JSON response from DarkSky API to get the weekly data.

Fields in the Chart Corresponding response object fields

time The value of the “time” attribute that is part of the “data” array in the

daily object.

temperatureLow The value of the “temperatureLow” attribute that is part of the “data”

array in the daily object.

temperatureHigh The value of the “temperatureHigh” attribute that is part of the “data”

array in the daily object.

Table 4: Mapping the result from DarkSky API for the range bar chart.

20

On clicking on any one of the range bar chart rows, a corresponding modal window is displayed

for that date. The modal window provides the detailed weather information for that date.

Figure 14: Modal providing weather information for that date.

The data for the modal is provided by another DarkSky API call:

https://api.darksky.net/forecast/[key]/[latitude],[longitude],[time]

Note: The time required here is in Unix format.

21

The JSON response for the modal data is shown below:

Figure 15: JSON response from the DarkSky API for a particular date.

Fields in the Modal Corresponding response object fields

Date

The value of the “time” attribute that is part of the “data” array in the

daily object. The time has to be converted into the form dd/mm/yyyy.

City

The value of the city can be taken from the input form if the user

provides the address or from ip-api to get current location.

Temperature

The value of the key “temperature” in the currently object. You

should display the value with a degree sign and F to indicate

temperature in Fahrenheit. For the degree sign use this image -

https://cdn3.iconfinder.com/data/icons/virtualnotebook/16/button_shape_oval-512.png

Summary The value of “summary” in the currently object.

22

Icon The value of “icon” in the currently object. It is possibly one of the

following values:

• clear-day | clear-night: The icon for this is

https://cdn3.iconfinder.com/data/icons/weather-344/142/sun-

512.png

• rain: The icon for this is

https://cdn3.iconfinder.com/data/icons/weather-344/142/rain-

512.png

• snow: The icon for this is

https://cdn3.iconfinder.com/data/icons/weather-344/142/snow-

512.png

• sleet: The icon for this is

https://cdn3.iconfinder.com/data/icons/weather-

344/142/lightning-512.png

• wind: The icon for this is

https://cdn4.iconfinder.com/data/icons/the-weather-is-nicetoday/64/weather_10-512.png

• fog: The icon for this is

https://cdn3.iconfinder.com/data/icons/weather-

344/142/cloudy-512.png

• cloudy: This icon for this is

https://cdn3.iconfinder.com/data/icons/weather-344/142/cloud-

512.png

• partly-cloudy-day | partly-cloudy-night: The icon for this is

https://cdn3.iconfinder.com/data/icons/weather-344/142/sunny-

512.png

Precipitation The value of “precipIntensity” in the currently object. The value is to

be rounded to 2 decimal places.

Chance of Rain The value of “precipProbability” in the currently object. The value is

to be multiplied by 100 to give the percentage.

Wind Speed The value of “windSpeed” in the currently object. The value should be

provided with the unit “mph”. The value should be rounded to 2

decimal places

Humidity The value of “humidity” in the currently object.

The value is to be multiplied by 100 to give the percentage.

Visibility The value of “visibility” in the currently object. The value should be

provided with the unit miles.

Table 5: Mapping the result from DarkSky API for the modal.

Note: If any value is 0, display the 0 value. If the key is null/ not present, display N/A.

23

3.2.4 Favorite Button and Twitter Button

The Favorite button (star) provides the user the ability to add or remove the city to their

favorites tab.

The Twitter button allows the user to compose a Tweet and post it to Twitter. Once the button is

clicked, a new dialog should be opened and display the default Tweet content in this format:

“The current temperature at (City) is (Temperature). The weather conditions are (Summary)

Website: URL #CSCI571WeatherSearch”.

Replace City, Temperature and Summary with the actual city searched with the temperature and

summary or that day. For example, see Figure 16.

Figure 16 Tweet

Adding the Twitter button to your webpage is very easy. You can visit these two pages to learn

how to use Twitter Web Intents:

https://dev.twitter.com/web/intents

https://dev.twitter.com/web/tweet-button/web-intent

The favorites button should be disabled until the content of the event tab and venue tab are

available.

Figure 17 Favorite and Twitter Buttons

3.4 Favorite Tab

In the Favorites tab, the favorite cities are listed in a table format. The user can search for

weather information for that city by clicking on the City name in the “City” column.

24

The information displayed in the Favorites tab is saved in and loaded from the local storage of

the browser; the buttons in the “Favorites” column of the Favorites tab is only used to remove a

city from the list and has a “trash” icon for it to be removed from the Favorite. (Refer to 5.5 for

the icons).

The columns in this tab are:

1. Counter: Just a counter value indicating the number of cities in the favorites list.

2. Image: The state seal provided by the Google Custom search API.

3. City: The favorite city the user put in their favorites list. On clicking it should provide the

weather details for that city.

4. State: The State abbreviations, which are present in the section 3.8 below and in the

states.txt file. Same as given in HW 6 documentation.

Please note if a user closes and re-opens the browser, its Favorites will still be there.

If there are no cities in Favorites, please show ‘No Records’. (see Figure 20)

Figure 18 Favorites

25

3.5 Error Messages

If for any reason an error occurs due to location error, an appropriate error message should be

displayed.

Figure 19 Error Message

3.6 No Records

Whenever the search receives no records, an appropriate message should be displayed.

Figure 20 No Records on Favorites

26

3.7 Progress Bars

Whenever data is being fetched, a dynamic progress bar must be displayed as shown in Figure 23.

You can use the progress bar component of Bootstrap to implement this feature. You can find

hints about the bootstrap components in the Hints section.

Figure 21 Progress Bar

3.8 List of US States and Their Two-Letter Abbreviations

Two-Letter Abbreviation State

3.9 Responsive Design

The following are snapshots of the webpage opened with Safari on iPhone 7 Plus. See the video

for more details.

You must watch the video carefully to see how the page looks like on mobile devices. All

functions must work on mobile devices.

Mobile browsers are different from desktop browsers. Even if your webpage works perfectly on

a desktop, it may not work as perfectly as you think on mobile devices. It’s important that you

also test your webpage on a real mobile device. Testing it in the mobile view of a desktop

browser will not guarantee that it works on mobile devices. You can use Firefox “Responsive

Design Mode” Tool for initial testing.

31

4. API Documentation

4.1 DarkSky API

To use the DarkSky API, you need first to register for DarkSky Account. This is the same App id

used for the HW6.

4.2 Google Customized Search API

This link will provide the details to get the API key:

https://developers.google.com/custom-search/json-api/v1/overview

Note: You can use any additional Angular libraries and Node.js modules you like.

5. Implementation Hints

5.1 Images

The images needed for this homework are available here:

http://csci571.com/hw/hw8/Images/Twitter.png

5.2 Get started with the Bootstrap Library

To get started with the Bootstrap toolkit, please refer to the link:

https://getbootstrap.com/docs/4.0/getting-started/introduction/.

You need to import the necessary CSS file and JS file provided by Bootstrap.

5.3 Bootstrap UI Components

Bootstrap provides a complete mechanism to make Web pages responsive to different mobile

devices. In this exercise, you will get hands-on experience with responsive design using the

Bootstrap Grid System.

At a minimum, you will need to use Bootstrap Forms, Tabs, Progress Bars and Alerts to

implement the required functionality.

Bootstrap Forms https://getbootstrap.com/docs/4.0/components/forms/

Bootstrap Tabs https://getbootstrap.com/docs/4.0/components/navs/#tabs

Bootstrap Progress Bars https://getbootstrap.com/docs/4.0/components/progress/

Bootstrap Alerts https://getbootstrap.com/docs/4.0/components/alerts/

Bootstrap Tooltip https://getbootstrap.com/docs/4.1/components/tooltips/

Bootstrap Cards https://getbootstrap.com/docs/4.0/components/card/

5.4 Angular Material

Angular Material (Angular 2+) :https://material.angular.io/

Autocomplete: https://material.angular.io/components/autocomplete/overview

32

Tooltip: https://material.angular.io/components/tooltip/overview

5.5 Material Icon

Icons for the search, clear_all, star, star_border and delete can be viewed here:

https://google.github.io/material-design-icons/

https://material.io/tools/icons/

5.6 Google App Engine/Amazon Web Services/ Microsoft Azure

You should use the domain name of the GAE/AWS/Azure service you created in Homework #7

to make the request. For example, if your GAE/AWS/Azure server domain is called

example.appspot.com/example.elasticbeanstalk.com/ example.azurewebsites.net, the JavaScript

program will perform a GET request with keyword=”xxx”, and an example query of the

following type will be generated:

GAE - http://example.appspot.com/weatherSearch?keyword=xxx

AWS - http://example.elasticbeanstalk.com/weatherSearch?keyword=xxx

Azure – http://example.azurewebsites.net/weatherSearch?keyword=xxx

Your URLs don’t need to be the same as the ones above. You can use whatever paths and

parameters you want. Please note that in addition to the link to your Homework #8, you should

also provide a link like this URL in the table of your Node.JS backend link. When your grader

clicks on this additional link, a valid link should return a JSON object with appropriate data.

5.7 Deploy Node.js application on GAE/AWS/Azure

Since Homework #8 is implemented with Node.js on AWS/GAE/Azure, you should select

Nginx as your proxy server (if available), which should be the default option.

5.8 AJAX call

You should send the request to the Node.js script(s) by calling an Ajax function (Angular). You

must use a GET method to request the resource since you are required to provide this link to your

homework list to let graders check whether the Node.js script code is running in the “cloud” on

Google GAE/AWS/Azure (see 6.6 above). Please refer to the grading guidelines for details.

Note: jQuery .ajax cannot be used in this project.

5.9 HTML5 Local Storage

Local storage is more secure, and large amounts of data can be stored locally, without affecting

website performance. Unlike cookies, the storage limit is far larger (at least 5MB) and

information is never transferred to the server. There are two methods, getItem() and setItem(),

that you can use. The local storage can only store strings. Therefore, you need to convert the data

to string format before storing it in the local storage. For more information, see:

https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

http://www.w3schools.com/html/html5_webstorage.asp

33

6. Files to Submit

In your course homework page, you should update the Homework #8 link to refer to your new

initial web page for this exercise. Additionally, you need to provide an additional link to the

URL of the GAE/AWS/Azure service where the AJAX call is made with sample parameter

values (i.e. a valid query, with keyword, location, etc. See 6.6).

Also, submit all files (HTML, JS, CSS, TS) you have written yourself, electronically to the

GitHub Classroom repository so that can be compared to all other students’ code. Don’t include

library, node-js modules, any config files, any angular-cli build files, or any images that we

provided or that are included in any library or any code generated by the tools.

Please note, you need to submit your files (HTML, JS, CSS, TS), both backend and

frontend, directly to the root folder of your homework 8 GitHub repository. That is, do not

submit any subfolders on GitHub. If you submit some subfolders, you will receive a 2-points

penalty.

**IMPORTANT**:

All videos are part of the homework description. All discussions and explanations in Piazza

related to this homework are part of the homework description and will be accounted into

grading. So please review all Piazza threads before finishing the assignment.


版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp