Sdc-Laboratory Manual Wordfile
Sdc-Laboratory Manual Wordfile
HANDOUT
Skill Development Course Lab (Node JS)
(R22CSE2221)
DEPARTMENT OF DATA
2023-24
Page |2
R22CSE2221
Prepared By
K. RAJA
ASSISTANT PROFESSOR
DEPARTMENT OF DATA SCIENCE
Page |3
• Strictly follow the instructions as printed on the cover page of answer script
Marks distribution: Procedure + Conduction + Viva: 10 +15+15 +20 (60)
• Change of experiment is allowed only once and marks allotted to the procedure part to
be made zero.
Page |4
Lab Experiments:
Build a responsive web application for shopping cart with registration, login, catalog and cart pages
1.
using CSS3 features, flex and grid.
2. Use JavaScript for doing client – side validation of the pages implemented in the experiment
Explore the features of ES6 like arrow functions, callbacks, promises, async/await. Implement an
3. application for reading the weather information from openweathermap.org and display the
information in the form of a graph on the web page.
Develop a java standalone application that connects with the database (Oracle / mySql) and
4.
perform the CRUD operation on the database tables.
5. Create an xml for the bookstore. Validate the same using both DTD and XSD.
Create a custom server using http module and explore the other modules of Node JS like OS, path,
6.
event.
Develop an express web application that can interact with REST API to perform CRUD operations
7.
on student data. (Use Postman)
Create a service in react that fetches the weather information from open weathermap.org and the
8.
display the current and historical weather information using graphical representation using chart.js
9. Create a TODO application in react with necessary components and deploy it into github.
Page |5
Aim:
Solution :
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="./style.css">
<title>Home - FBS</title>
</head>
<body>
<div class="wrapper">
<div class="container">
<header>
<table width="100%" align="center" cellpadding="0" cellspacing="2">
<tr>
<th width="20%"><img src="fbs.png" alt="FBS LOGO" width="130"
height="100"/></th>
<th colspan=4>
<h1 style="color:white;">FBS - WORLD BEST ONLINE EBOOKS
WEBSITE</h1>
</th>
</tr>
</table>
</header>
<nav>
<table width="100%" align="center" cellpadding="0" cellspacing="2">
<tbody align="center" style="font-weight:bold;font-size:18px;"">
<tr>
<td width="20%"><hr><a href="index.html">Home</a><hr></td>
<td width="20%"><hr><a href="login.html">Login</a><hr></td>
<td width="20%"><hr><a
href="registration.html">Registration</a><hr></td>
<td width="20%"><hr><a href="cart.html" >Cart</a><hr></td>
</tr>
</tbody>
</table>
</nav>
</div>
<div class="container1">
<div class="sidebar1"></div>
<div class="container2">
<main>
<center>
<h2>Welcome to FBS e-Book's Website</h2>
<p>Shopping at <font size=5>FBS</font> can be both
<font size=5>fun</font>
Page |6
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="./style.css">
<title>Login - FBS</title>
</head>
<body>
<div class="wrapper">
<div class="container">
<header>
<table width="100%" align="center" cellpadding="0" cellspacing="2">
<tr>
<th width="20%"><img src="fbs.png" alt="FBS LOGO" width="130"
height="100"/></th>
<th colspan=4>
<h1 style="color:white;">FBS - WORLD BEST ONLINE EBOOKS
WEBSITE</h1>
</th>
</tr>
</table>
</header>
<nav>
<table width="100%" align="center" cellpadding="0" cellspacing="2">
<tbody align="center" style="font-weight:bold;font-size:18px;"">
<tr>
<td width="20%"><hr><a href="index.html">Home</a><hr></td>
<td width="20%"><hr><a href="login.html">Login</a><hr></td>
<td width="20%"><hr><a
href="registration.html">Registration</a><hr></td>
<td width="20%"><hr><a href="cart.html" >Cart</a><hr></td>
</tr>
</tbody>
</table>
</nav>
</div>
<div class="container1">
<div class="sidebar1"></div>
Page |7
<div class="container2">
<main>
<center><br>
<h3> Login Details</h3> <br/>
<form name="f1">
<table width="100%" align="center" >
<tr>
<td> User Name : </td>
<td> <input type="text" name="username"></td>
</tr>
<tr><td><br></td></tr>
<tr>
<td> Password : </td>
<td> <input type="password" name="password"></td>
</tr>
<tr><td><br></td></tr>
<tr><td></td>
<td><input type="submit" value="SUBMIT">
<input type="reset" value="RESET"></td>
</tr>
</table>
</form>
</center>
</main>
</div>
<div class="sidebar2"></div>
</div>
<footer><font color="white">(C) 2024 All rights reserved by FBS
ebooks</font></footer>
</div>
</body>
</html>
registration.html
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="./style.css">
<title>Registration - FBS</title>
</head>
<body>
<div class="wrapper">
<div class="container">
<header>
<table width="100%" align="center" cellpadding="0" cellspacing="2">
<tr>
<th width="20%"><img src="fbs.png" alt="FBS LOGO" width="130"
height="100"/></th>
<th colspan=4>
<h1 style="color:white;">FBS - WORLD BEST ONLINE EBOOKS
WEBSITE</h1>
</th>
</tr>
</table>
</header>
Page |8
<nav>
<table width="100%" align="center" cellpadding="0" cellspacing="2">
<tbody align="center" style="font-weight:bold;font-size:18px;"">
<tr>
<td width="20%"><hr><a href="index.html">Home</a><hr></td>
<td width="20%"><hr><a href="login.html">Login</a><hr></td>
<td width="20%"><hr><a
href="registration.html">Registration</a><hr></td>
<td width="20%"><hr><a href="cart.html" >Cart</a><hr></td>
</tr>
</tbody>
</table>
</nav>
</div>
<div class="container1">
<div class="sidebar1"></div>
<div class="container2">
<main>
<center><br>
<h3>Registration Form </h3>
<br/>
<form name="f1">
<table cellpadding="1" align="center" >
<tr><td> Name:*</td>
<td><input type="text" name="username"></td></tr>
<tr><td>Password:*</td>
<td><input type="password" name="password"></td></tr>
<tr><td>Email ID:*</td>
<td><input type="text" name="email"></td></tr>
<tr><td>Phone Number:*</td>
<td><input type="text" name="phno"></td></tr>
<tr><td valign="top">Gender:*</td>
<td><input type="radio" name="radio" value="1">Male
<input type="radio" name="radio" value="2">Female</td></tr>
<tr> <td valign="top">Language Known:*</td>
<td> <input type="checkbox" name="checkbox"
value="English">English<br/>
<input type="checkbox" name="checkbox"
value="Telugu">Telugu<br>
<input type="checkbox" name="checkbox"
value="Hindi">Hindi<br>
<input type="checkbox" name="checkbox" value="Tamil">Tamil
</td></tr>
<tr> <td valign="top">Address:*</td>
<td><textarea name="address"></textarea></td>
<tr><td></td><td><input type="submit" value="submit"
hspace="10">
<input type="reset" value="reset"></td></tr>
<tr> <td colspan=2 >*<font color="#FF0000">fields are
mandatory</font>
</td>
</tr>
</table>
</form>
</center>
</main>
</div>
<div class="sidebar2"></div>
</div>
Page |9
cart.html
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="./style.css">
<title>Cart - FBS</title>
</head>
<body>
<div class="wrapper">
<div class="container">
<header>
<table width="100%" align="center" cellpadding="0" cellspacing="2">
<tr>
<th width="20%"><img src="fbs.png" alt="FBS LOGO" width="130"
height="100"/></th>
<th colspan=4>
<h1 style="color:white;">FBS - WORLD BEST ONLINE EBOOKS
WEBSITE</h1>
</th>
</tr>
</table>
</header>
<nav>
<table width="100%" align="center" cellpadding="0" cellspacing="2">
<tbody align="center" style="font-weight:bold;font-size:18px;"">
<tr>
<td width="20%"><hr><a href="index.html">Home</a><hr></td>
<td width="20%"><hr><a href="login.html">Login</a><hr></td>
<td width="20%"><hr><a
href="registration.html">Registration</a><hr></td>
<td width="20%"><hr><a href="cart.html" >Cart</a><hr></td>
</tr>
</tbody>
</table>
</nav>
</div>
<div class="container1">
<div class="sidebar1"></div>
<div class="container2">
<main>
<center>
<h3>Cart</h3>
<table width="100%" align="center" >
<tbody>
<tr>
<th width="40%"><hr>BookName<hr></th>
<th width="20%"><hr>Price<hr></th>
<th width="20%"><hr>Quantity<hr></th>
P a g e | 10
style.css
body{
font-family: monospace;
}
main {
background-color: #efefef;
color: #330000;
margin-left: 10px;
height: 60vh;
}
header, footer {
background-color: #000d57;
color: #fff;
padding: 1rem;
height: 50px;
}
header, nav{
margin-bottom: 10px;
flex-basis: 50%;
}
P a g e | 11
footer{
margin-top: 10px;
}
nav {
background-color: #fff;
color: #000;
padding: 1rem;
height: 20px;
}
.sidebar1, .sidebar2 {
flex-basis: 10%;
background-color: #fff;
color: #000;
}
.sidebar2{
margin-left: 10px;
}
.container1{
display: flex;
}
.container2 {
display: flex;
flex-direction: column;
flex: 1;
}
.wrapper {
display: flex;
flex-direction: column;
font-weight: 600;
}
P a g e | 12
Output :
P a g e | 13
Viva Questions:
1. Define Node.js.
P a g e | 14
2. Define Java Script.
3.Define HTML.
4.Define CSS3
5.What is href.
Aim:
Solution :
registrationJS.html
<html>
<head>
<title> Welcome to NNRG e-Book's website</title>
<script language="javascript">
function validate() {
// username validation
var uname = f1.username.value;
if (uname.length<=0)
{
alert("Please Enter UserName");
f1.username.focus();
return false;
}
if (uname.length < 8)
{
alert("Please enter UserName not less than 8");
f1.username.focus();
return false;
}
//password validation
var pwd = f1.password.value;
if (pwd.length<=0)
{
alert("Please Enter password");
f1.password.focus();
return false;
}
if (pwd.length < 6)
{
alert("Please enter Password not less than 6");
f1.password.focus();
return false;
}
// email validation
var email = f1.email.value;
if (email.length<=0)
{
P a g e | 15
alert("Please Enter email");
f1.email.focus();
return false;
}
else {
let eflag=false;
for(i=0;i<email.length;i++) {
if(email.charAt(i)=="@")
{
eflag=true;
}
}
if(!(eflag))
{
alert("Please enter a valid Email ID");
f1.email.focus();
return false;
}
}
// phone number validation
var phno = f1.phno.value;
if (phno.length<=0)
{
alert("Please Enter Phone Number");
f1.phno.focus();
return false;
}
if (isNaN(phno))
{
alert("Please Enter Valid Phone Number");
f1.phno.focus();
return false;
}
if (phno.length != 10)
{
alert("Please Enter Valid Phone Number");
f1.phno.focus();
return false;
}
// gender validation
let flag=false;
for(i=0;i<f1.gen.length;i++)
if(f1.gen[i].checked)
flag=true;
if(!(flag))
{
alert("Please choose a Gender");
return false;
}
// Language validation
flag=false;
for(i=0;i<f1.lang.length;i++)
if(f1.lang[i].checked)
flag=true;
if(!(flag))
{
alert("Please select at least one of the Language options.");
return false;
}
// address validation
var addr = f1.address.value;
if (addr.length<=0)
{
alert("Please Enter address");
f1.address.focus();
P a g e | 16
return false;
}
// to display Success message
alert("Registration Successful");
}
</script>
</head>
<body>
<center><br>
<h3>Registration Form </h3>
<br/>
<form name="f1">
<table cellpadding="1" align="center" >
<tr><td> User Name:*</td>
<td><input type="text" name="username"></td></tr>
<tr><td>Password:*</td>
<td><input type="password" name="password"></td></tr>
<tr><td>Email ID:*</td>
<td><input type="text" name="email"></td></tr>
<tr><td>Phone Number:*</td>
<td><input type="text" name="phno"></td></tr>
<tr><td valign="top">Gender:*</td>
<td><input type="radio" name="gen" value="Male">Male
<input type="radio" name="gen" value="Female">Female</td></tr>
<tr> <td valign="top">Language Known:*</td>
<td> <input type="checkbox" name="lang" value="English">English<br/>
<input type="checkbox" name="lang" value="Telugu">Telugu<br>
<input type="checkbox" name="lang" value="Hindi">Hindi<br>
<input type="checkbox" name="lang" value="Tamil">Tamil
</td></tr>
<tr> <td valign="top">Address:*</td>
<td><textarea name="address"></textarea></td>
<tr><td></td><td><input type="button" value="SUBMIT" hspace="10"
onclick="validate()">
<input type="reset" value="RESET"></td></tr>
<tr> <td colspan=2 >*<font color="#FF0000">fields are mandatory</font>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
P a g e | 17
Output :
P a g e | 18
Viva Questions:
Aim:
Solution :
server.js
// server.js
constexpress = require('express');
constaxios = require('axios');
constapp = express();
constport = 3000;
app.use(express.static('public'));
try {
constapiKey = 'c97c0c1086d42990e89d64d76f50bb61';
constresponse =
awaitaxios.get(`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=$
{apiKey}`);
consttemperature = response.data.main.temp;
res.json({ temperature });
} catch (error) {
console.error('Error fetching weather data:', error);
res.status(500).json({ error:'Internal Server Error' });
}
});
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`);
});
☛ Create a folder named public and create an index.html file for the frontend:
index.html
<!DOCTYPE html>
P a g e | 20
<html lang="en">
<head>
<link rel="stylesheet" href="./style.css">
<title>Home - FBS</title>
</head>
<body>
<div class="wrapper">
<div class="container">
<header>
<table width="100%" align="center" cellpadding="0" cellspacing="2">
<tr>
<th width="20%"><img src="fbs.png" alt="FBS LOGO" width="130"
height="100"/></th>
<th colspan=4>
<h1 style="color:white;">FBS - WORLD BEST ONLINE EBOOKS
WEBSITE</h1>
</th>
</tr>
</table>
</header>
<nav>
<table width="100%" align="center" cellpadding="0" cellspacing="2">
<tbody align="center" style="font-weight:bold;font-size:18px;"">
<tr>
<td width="20%"><hr><a href="index.html">Home</a><hr></td>
<td width="20%"><hr><a href="login.html">Login</a><hr></td>
<td width="20%"><hr><a
href="registration.html">Registration</a><hr></td>
<td width="20%"><hr><a href="cart.html" >Cart</a><hr></td>
</tr>
</tbody>
</table>
</nav>
</div>
<div class="container1">
<div class="sidebar1"></div>
<div class="container2">
<main>
<center>
<h2>Welcome to FBS e-Book's Website</h2>
<p>Shopping at <font size=5>FBS</font> can be both
<font size=5>fun</font>
and <font size=5>savings</font>.</br>Shop with us in
this special <font
size=5>discount</font> season and save upto <font
size=5>90%</font> on all your
purchases.</br></p>
<br/><br/><br/><br/><br/><br/><br/><br/>
</main>
</div>
<div class="sidebar2"></div>
</div>
<footer><font color="white">(C) 2024 All rights reserved by FBS
ebooks</font></footer>
</div>
</body>
</html>
node server.js
Output :
P a g e | 22
☛ Locate API key
Viva Questions:
Aim:
Solution :
I will provide you with the MySQL code for creating the student table and make some changes to your
Java code to improve it:
☛ MySQL Code:
This SQL code creates a table with three columns: s_id for student ID (primary key), s_name for
student name, and s_address for student address.
Java Code
InsertData.java
import java.sql.*;
import java.util.Scanner;
Output :
UpdateData.java
import java.sql.*;
import java.util.Scanner;
}
}
}
Output :
Update Data in student table:
________________________________________
Enter student id: 101
Enter student name: Jane Doe
Enter student address: 456 Broad Street
Data updated successfully
DeleteData.java
import java.sql.*;
import java.util.Scanner;
import java.sql.*;
System.out.println("________________________________________");
while (rs.next()) {
System.out.println(rs.getString("s_id") + " \t " +
rs.getString("s_name") + " \t " + rs.getString("s_address"));
System.out.println("________________________________________");
}
}
Output :
SID STU_NAME ADDRESS
________________________________________
102 Alice Smith 789 Oak Avenue
________________________________________
103 Bob Johnson 567 Pine Road
Viva Questions:
1. What is Database?
☛ Create an xml for the bookstore. Validate the same using both
DTD and XSD.
Solution :
bookstore.xml
bookstore.xsd
<xs:complexType name="bookstoreType">
<xs:sequence>
P a g e | 28
<xs:element name="book" type="bookType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="bookType">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="author" type="xs:string"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Output :
Viva Questions:
1. What's the purpose of XML validation, and how does DTD differ from XSD in this
context?
2. How do you associate a DTD or XSD schema with an XML document for validation?
3. Explain a key advantage of using XSD over DTD for XML validation.
4. What approach would you take to handle validation errors when validating XML
against a schema?
5.Can you briefly describe the main components of an XSD schema for XML validation?
P a g e | 29
Aim:
☛ Create a custom server using http module and explore the other
modules of Node JS like OS, path, event.
Solution :
Open a terminal or command prompt in the directory where you saved your server.js file.
Execute the server script using the Node.js runtime. In the terminal, run:
node server.js
This will start the HTTP server, and you should see the message "Server running at
http://127.0.0.1:3000/".
Open your web browser and navigate to http://127.0.0.1:3000/ or http://localhost:3000/. You should
see the response "Hello, World!".
☛ Check OS Information:
In the same terminal where your server is running, you'll see information about your operating system
(OS) type, platform, architecture, CPU cores, etc.
The joined path using the path module is printed in the terminal.
P a g e | 30
☛ Check Custom Event:
The script emits a custom event and listens for it. In the terminal, you should see the message
"Custom Event Triggered: { message: 'Hello from custom event!' }".
To stop the server, press Ctrl+C in the terminal where the server is running.
server.js
});
Output :
In the Terminal:
In the Browser:
Link: http://127.0.0.1:3000/
Viva Questions:
Aim:
Develop an express web application that can interact with REST API
to perform CRUD operations on student data. (Use Postman)
Solution :
Firstly we need to create a new folder and open the folder in the command prompt and
enter a command as below:
npminit -y
db.js
createStudentsTable(db);
}
});
module.exports = { initializeDatabase };
when we execute both the db.js then the database will be created that is mydatabase.db
app.js
console.log(err.message);
} else {
console.log('Connected to the SQLite database.');
}
});
// Update a student
app.put('/students/:id', (req, res) => {
const id = req.params.id;
const{ name, age, grade } = req.body;
db.run('UPDATE students SET name = ?, age = ?, grade = ? WHERE id
= ?', [name, age, grade, id], function (err) {
if (err) {
return console.error(err.message);
P a g e | 35
}
res.json({ updatedID:id });
});
});
// Delete a student
app.delete('/students/:id', (req, res) => {
const id = req.params.id;
db.run('DELETE FROM students WHERE id = ?', id, function (err) {
if (err) {
return console.error(err.message);
}
res.json({ deletedID:id });
});
});
app.listen(port, () => {
console.log('Server running at http://localhost:${port}');
});
Output :
GET:
Open Postman.
Set the request type to GET.
Enter the URL: http://localhost:3000/students.
Open Postman.
P a g e | 36
Set the request type to POST.
Enter the URL: http://localhost:3000/students.
Go to the "Body" tab.
Select raw and set the body to JSON format.
DELETE:
PUT:
P a g e | 38
Set the request type to PUT.
Enter the URL for the student you want to delete (replace: id with an actual student
ID): http://localhost:3000/students/:id
Go to the "Body" tab.
Select raw and set the body to JSON format
Viva Questions:
1. How does your Express web application handle CRUD operations on student data, and
what HTTP methods are used for each operation?
2. Can you explain the process of interacting with the REST API endpoints of your
application using Postman?
3. How do you ensure data validation and error handling in your Express application
when performing CRUD operations?
4. Describe the middleware you've implemented in your Express application and its role
in processing incoming requests.
5. What security measures have you implemented to protect student data in transit and
at rest within your Express application?
P a g e | 39
Aim:
Solution :
npxcreate-react-app weather-app
cd weather-app
In the project directory, install the necessary packages by executing the following command
We will use the Axios library to make HTTP requests to the OpenWeatherMap API.
Inside the "src" directory, create a new file called "Weather.js" and open it in your code
editor.
Add the following code to define a functional component named Weather:
useEffect(() => {
fetchData();
}, []);
return (
<div>
<form onSubmit={handleSubmit}>
<input
type="text"
placeholder="Enter city name"
value={city}
onChange={handleInputChange}
/>
<button type="submit">Get Weather</button>
</form>
{weatherData ? (
<>
<h2>{weatherData.name}</h2>
<p>Temperature: {weatherData.main.temp} C</p>
<p>Description: {weatherData.weather[0].description}</p>
<p>Feels like : {weatherData.main.feels_like} C</p>
<p>Humidity : {weatherData.main.humidity}%</p>
<p>Pressure : {weatherData.main.pressure}</p>
<p>Wind Speed : {weatherData.wind.speed}m/s</p>
</>
) : (
<p>Loading weather data...</p>
P a g e | 42
)}
</div>
);
};
Replace {YOUR_API_KEY} in the API URL with the API key you generated from OpenWeatherMap.
exportdefault App;
Output :
Initial Screen
P a g e | 43
After Supply the City name
Viva Questions:
1. How does your React service fetch weather data from OpenWeatherMap, and what
libraries do you use for HTTP requests and chart visualization?
2. Can you explain the process of integrating Chart.js with React to display weather
information graphically?
3. How do you handle errors and loading states when fetching weather data
asynchronously in your React application?
4. Describe how you would implement user input for retrieving historical weather data
based on specific dates or date ranges.
5 What considerations did you take into account when styling your React weather
application to ensure a visually appealing and user-friendly interface?
Aim:
Solution :
Our first task is to set up the React project. This step involves creating the necessary project
structure. Here's how you can do it:
P a g e | 44
1. Create a React App:
Open your terminal and navigate to your preferred directory. Run the following command to generate
a new React app. Replace "todo-app" with your desired project name:
This command will create a directory named "todo-app" with all the initial code required for a React
app.
cd todo-app
npm start
This will open your React app, and you�ll see the default React starter page in your web browser
at 'http://localhost:3000'.
In this step, we create the App component, which serves as the entry point to our Todo List
application.
Now, let's create the 'TodoList' component, which is responsible for managing the list of tasks and
handling task-related functionality.
function TodoList() {
const [tasks, setTasks] = useState([
{
id: 1,
text: 'Doctor Appointment',
completed: true
},
{
id: 2,
text: 'Meeting at School',
completed: false
}
]);
<input
value={text}
onChange={e => setText(e.target.value)}
/>
<button onClick={() => addTask(text)}>Add</button>
</div>
);
}
exportdefault TodoList;
src->Component
In this step, we create the 'TodoItem' component, which represents an individual task in our Todo
List.
return (
<div className="todo-item">
<input
type="checkbox"
checked={task.completed}
onChange={handleChange}
/>
<p>{task.text}</p>
<button onClick={() => deleteTask(task.id)}>
X
</button>
</div>
);
}
exportdefault TodoItem;
These three components, 'App', 'TodoList', and 'TodoItem', work together to create a functional Todo
List application in React. The 'TodoList' component manages the state of the tasks, and the
'TodoItem' component represents and handles individual tasks within the list.
Step 5: Styling
To enhance the visual appeal of your Todo List, you can apply some basic styling. Here�s an
example of how you can style the todo items. In the `App.css` file, add the following styles:
P a g e | 47
.todo-item {
display: flex;
justify-content: space-between;
margin-bottom: 8px;
}
.todo-itemp {
color: #888;
text-decoration: line-through;
}
Output :
Initially it looks like:
P a g e | 48
Next,
Viva Questions: