Skip to content

Commit 2cf0238

Browse files
committed
nodeapp is deactualized to match what was shown in class
1 parent 44fe0ea commit 2cf0238

18 files changed

+264
-571
lines changed

nodeapp/.env.example

Lines changed: 0 additions & 2 deletions
This file was deleted.

nodeapp/app.js

Lines changed: 66 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,91 @@
1-
import path from 'node:path'
2-
import express from 'express'
3-
import createError from 'http-errors'
4-
import logger from 'morgan'
5-
import connectMongoose from './lib/connectMongoose.js'
6-
import * as homeController from './controllers/homeController.js'
7-
import * as loginController from './controllers/loginController.js'
8-
import * as agentsController from './controllers/agentsController.js'
9-
import * as sessionManager from './lib/sessionManager.js'
10-
import upload from './lib/uploadConfigure.js'
11-
import i18n from './lib/i18nConfigure.js'
1+
import path from "node:path";
2+
import { fileURLToPath } from "node:url";
3+
import express from "express";
4+
import createError from "http-errors";
5+
import logger from "morgan";
6+
import connectMongoose from "./lib/connectMongoose.js";
7+
import * as homeController from "./controllers/homeController.js";
8+
import * as loginController from "./controllers/loginController.js";
9+
import * as agentsController from "./controllers/agentsController.js";
10+
import * as sessionManager from "./lib/sessionManager.js";
11+
import * as ejs from "ejs";
1212

13-
await connectMongoose() // top level await thanks to ES modules
14-
console.log('Connected to MongoDB.')
13+
// Usar una forma compatible con entornos de test para obtener __dirname
14+
let dirname;
15+
try {
16+
dirname = path.dirname(fileURLToPath(import.meta.url));
17+
} catch (error) {
18+
// Fallback para entornos de test
19+
dirname = ".";
20+
}
1521

16-
const app = express()
22+
const app = express();
1723

18-
app.set('views', 'views') // views folder
19-
app.set('view engine', 'html')
20-
app.engine('html', (await import('ejs')).__express)
24+
app.set("views", "views"); // views folder
25+
app.set("view engine", "html");
26+
app.engine("html", ejs.__express);
2127

22-
app.locals.appName = 'NodeApp'
28+
app.locals.appName = "NodeApp";
2329

24-
app.use(logger('dev'))
25-
app.use(express.urlencoded({ extended: false }))
26-
app.use(express.static(path.join(import.meta.dirname, 'public')))
30+
app.use(logger("dev"));
31+
app.use(express.urlencoded({ extended: false }));
32+
app.use(express.static(path.join(dirname, "public")));
2733

2834
/**
2935
* Application routes
3036
*/
31-
app.use(sessionManager.middleware)
32-
app.use(sessionManager.useSessionInViews)
33-
app.use(i18n.init)
34-
app.get('/', homeController.index)
35-
app.get('/login', loginController.index)
36-
app.post('/login', loginController.postLogin)
37-
app.get('/logout', loginController.logout)
38-
app.get('/agents/new', sessionManager.guard, agentsController.index)
39-
app.post('/agents/new', sessionManager.guard, upload.single('avatar') , agentsController.postNew)
40-
app.get('/agents/delete/:agentId', sessionManager.guard, agentsController.deleteAgent)
37+
app.use(sessionManager.middleware);
38+
app.use(sessionManager.useSessionInViews);
39+
app.get("/", homeController.index);
40+
app.get("/login", loginController.index);
41+
app.post("/login", loginController.postLogin);
42+
app.get("/logout", loginController.logout);
43+
app.get("/agents/new", sessionManager.guard, agentsController.index);
44+
app.post("/agents/new", sessionManager.guard, agentsController.postNew);
45+
app.get(
46+
"/agents/delete/:agentId",
47+
sessionManager.guard,
48+
agentsController.deleteAgent
49+
);
4150

4251
// Ejemplos
43-
app.get('/param_in_route/:num?', homeController.paranInRoute)
44-
app.get('/param_in_route_multiple/:product/size/:size([0-9]+)/color/:color', homeController.paranInRouteMultiple)
45-
app.get('/param_in_query', homeController.validateParamInQuery, homeController.paramInQuery)
46-
app.post('/post_with_body', homeController.postWithBody)
52+
app.get("/param_in_route/:num?", homeController.paranInRoute);
53+
app.get(
54+
"/param_in_route_multiple/:product/size/:size([0-9]+)/color/:color",
55+
homeController.paranInRouteMultiple
56+
);
57+
app.get(
58+
"/param_in_query",
59+
homeController.validateParamInQuery,
60+
homeController.paramInQuery
61+
);
62+
app.post("/post_with_body", homeController.postWithBody);
4763

4864
// catch 404 and send error
4965
app.use((req, res, next) => {
50-
next(createError(404))
51-
})
66+
next(createError(404));
67+
});
5268

5369
// error handler
5470
app.use((err, req, res, next) => {
55-
5671
// manage validation errors
5772
if (err.array) {
58-
err.message = 'Invalid request: ' + err.array()
59-
.map(e => `${e.location} ${e.type} "${e.path}" ${e.msg}`)
60-
.join(', ')
61-
err.status = 422
73+
err.message =
74+
"Invalid request: " +
75+
err
76+
.array()
77+
.map((e) => `${e.location} ${e.type} "${e.path}" ${e.msg}`)
78+
.join(", ");
79+
err.status = 422;
6280
}
6381

64-
res.status(err.status || 500)
82+
res.status(err.status || 500);
6583

6684
// set locals, including error information in development
67-
res.locals.message = err.message
68-
res.locals.error = process.env.NODEAPP_ENV === 'development' ? err : {}
85+
res.locals.message = err.message;
86+
res.locals.error = process.env.NODEAPP_ENV === "development" ? err : {};
6987

70-
res.render('error')
71-
})
88+
res.render("error");
89+
});
7290

73-
export default app
91+
export default app;
Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,37 @@
1-
import Agent from '../models/Agent.js'
1+
import Agent from "../models/Agent.js";
22

33
export function index(req, res, next) {
4-
res.render('new-agent')
4+
res.render("new-agent");
55
}
66

77
export async function postNew(req, res, next) {
88
try {
9-
const { name, age } = req.body
10-
const userId = req.session.userId
9+
const { name, age } = req.body;
10+
const userId = req.session.userId;
1111

1212
// TODO validaciones
1313

1414
// creo una instancia de agente en memoria
15-
const agent = new Agent({
16-
name,
17-
age,
18-
owner: userId,
19-
avatar: req.file.filename
20-
})
15+
const agent = new Agent({ name, age, owner: userId });
2116

2217
// lo guardo en base de datos
23-
await agent.save()
24-
25-
res.redirect('/')
18+
await agent.save();
2619

20+
res.redirect("/");
2721
} catch (error) {
28-
next(error)
22+
next(error);
2923
}
3024
}
3125

3226
export async function deleteAgent(req, res, next) {
3327
try {
34-
const userId = req.session.userId
35-
const agentId = req.params.agentId
36-
37-
await Agent.deleteOne({ _id: agentId, owner: userId })
28+
const userId = req.session.userId;
29+
const agentId = req.params.agentId;
3830

39-
res.redirect('/')
31+
await Agent.deleteOne({ _id: agentId, owner: userId });
4032

33+
res.redirect("/");
4134
} catch (error) {
42-
next(error)
35+
next(error);
4336
}
44-
}
37+
}

nodeapp/controllers/homeController.js

Lines changed: 29 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,63 @@
1-
import { query, validationResult } from 'express-validator'
2-
import Agent from '../models/Agent.js'
1+
import { query, validationResult } from "express-validator";
2+
import Agent from "../models/Agent.js";
33

44
export async function index(req, res, next) {
55
try {
6-
const userId = req.session.userId
6+
const userId = req.session.userId;
77

8-
// Filters
9-
// http://localhost:3000/?name=Smith
10-
const filterName = req.query.name
11-
// http://localhost:3000/?age=33
12-
const filterAge = req.query.age
8+
res.locals.agents = await Agent.find({ owner: userId });
139

14-
// Pagination
15-
// http://localhost:3000/?limit=2&skip=2
16-
const limit = req.query.limit
17-
const skip = req.query.skip
10+
const now = new Date();
11+
res.locals.esPar = now.getSeconds() % 2 === 0;
12+
res.locals.segundoActual = now.getSeconds();
1813

19-
// Sorting
20-
// http://localhost:3000/?sort=-name
21-
// http://localhost:3000/?sort=-age%20-name
22-
const sort = req.query.sort
23-
24-
const filter = {
25-
owner: userId,
26-
}
27-
28-
if (filterName) {
29-
filter.name = filterName
30-
}
31-
32-
if (filterAge) {
33-
filter.age = filterAge
34-
}
35-
36-
res.locals.agents = await Agent.list(filter, limit, skip, sort)
37-
38-
const now = new Date()
39-
res.locals.esPar = (now.getSeconds() % 2) === 0
40-
res.locals.segundoActual = now.getSeconds()
41-
42-
res.locals.codigo = '<script>alert("inyectado!!!")</script>'
43-
44-
res.render('home')
14+
res.locals.codigo = '<script>alert("inyectado!!!")</script>';
4515

16+
res.render("home");
4617
} catch (error) {
47-
next(error)
18+
next(error);
4819
}
4920
}
5021

5122
// /param_in_route/45
5223
export function paranInRoute(req, res, next) {
53-
const num = req.params.num
24+
const num = req.params.num;
5425

55-
res.send('me has pasado ' + num)
26+
res.send("me has pasado " + num);
5627
}
5728

5829
// /param_in_route_multiple/pantalon/size/M/color/blue
5930
export function paranInRouteMultiple(req, res, next) {
60-
const product = req.params.product
61-
const size = req.params.size
62-
const color = req.params.color
31+
const product = req.params.product;
32+
const size = req.params.size;
33+
const color = req.params.color;
6334

64-
res.send(`quieres un ${product} de talla ${size} y color ${color}`)
35+
res.send(`quieres un ${product} de talla ${size} y color ${color}`);
6536
}
6637

6738
// /param_in_query?color=rojo
6839
export const validateParamInQuery = [
69-
query('color')
40+
query("color")
7041
// .notEmpty()
71-
.custom(value => {
72-
return ['red', 'blue'].includes(value)
42+
.custom((value) => {
43+
return ["red", "blue"].includes(value);
7344
})
74-
.withMessage('must be red or blue'),
75-
query('talla')
76-
.isNumeric()
77-
.withMessage('must be numeric')
78-
]
45+
.withMessage("must be red or blue"),
46+
query("talla").isNumeric().withMessage("must be numeric"),
47+
];
7948
export function paramInQuery(req, res, next) {
80-
validationResult(req).throw()
49+
validationResult(req).throw();
8150

82-
const color = req.query.color
51+
const color = req.query.color;
8352

53+
console.log(req.query);
8454

85-
console.log(req.query)
86-
87-
res.send(`el color es ${color}`)
55+
res.send(`el color es ${color}`);
8856
}
8957

9058
// POST /post_with_body
9159
export function postWithBody(req, res, next) {
92-
const { age, color } = req.body
60+
const { age, color } = req.body;
9361

94-
res.send('ok')
95-
}
62+
res.send("ok");
63+
}

0 commit comments

Comments
 (0)