# index.js file
## What is index.js used for?
The index.js file creates the express server and provides an entry point for HTTP requests. It handles the Sessions and some of the Websockets setup. It's also in charge of handling or directing requests and middleware.
### express
Express is a Node.js framework that allows for quick and easy server set up, and provides some additional features to use inside of the server.
Installation:
```
npm install express
```
Basic server setup:
```javascript=
const express = require('express')
let app = express()
let server = http.createServer(app)
server.listen(process.env.CONTROLLERPORT || 3100, () =>
console.log(
`Server listening at http://localhost:${
process.env.CONTROLLERPORT || 3100
}`,
`\n Agent Address: ${process.env.AGENTADDRESS || 'localhost:8150'}`,
),
)
```
### express-session
Express-session is a framework that is used for creating and managing session middleware to provide user cookies.
Installation:
```
npm install express-session
```
Example Implementation:
```javascript=
app.use(
session({
secret: process.env.SESSION_SECRET,
cookie: {maxAge: 3600 * 1000, httpOnly: false},
name: 'sessionId',
resave: true, // Forces the session to be saved back to the session store, even if the session was never modified during the request.
rolling: true, // keep updating the session on new requests
saveUninitialized: false, // don't create a session on any API call where the session is not modified
secure: true, // only use cookie over https
ephemeral: false, // delete this cookie while browser close
}),
)
```
### passport
Passport is Express compatible middleware for Node.js. It is used for authenticating requests and for deciding what to do if the authentication succeeds or fails.
Installation:
```
npm install passport
```
Configure With Express:
```javascript=
app.use(passport.initialize());
```
Configure For Persistant Login Sessions:
```javascript=
app.use(passport.session());
```
Example Implementation:
```javascript=
passport.authenticate('local', (err, user, info) => {
if (err) throw err
if (!user) res.json({ error: 'Username or password is wrong.' })
else {
req.logIn(user, (err) => {
if (err) throw err
// Put roles in the array
const userRoles = []
req.user.Roles.forEach((element) => userRoles.push(element.role_name))
res.cookie(
'user',
{ id: req.user.user_id, username: req.user.username, roles: userRoles },
{ httpOnly: false },
)
res.json({
id: req.user.user_id,
username: req.user.username,
roles: userRoles,
})
console.log(req.user)
})
}
})(req, res, next)
```