├── mongod-local.sh
├── views
├── error.ejs
├── user.ejs
└── index.ejs
├── routes
├── users.js
└── index.js
├── public
└── stylesheets
│ └── style.css
├── db.js
├── package.json
├── .gitignore
├── app.js
└── bin
└── www
/mongod-local.sh:
--------------------------------------------------------------------------------
1 | #!bin/sh
2 | #Starts mongodb
3 | mongod --dbpath $HOME/web-app/data
--------------------------------------------------------------------------------
/views/error.ejs:
--------------------------------------------------------------------------------
1 |
<%= message %>
2 | <%= error.status %>
3 | <%= error.stack %>
4 |
--------------------------------------------------------------------------------
/routes/users.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 |
4 | /* GET users listing. */
5 |
6 |
7 | module.exports = router;
8 |
--------------------------------------------------------------------------------
/public/stylesheets/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding: 50px;
3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
4 | }
5 |
6 | a {
7 | color: #00B7FF;
8 | }
9 |
--------------------------------------------------------------------------------
/db.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | mongoose.connect('mongodb://127.0.0.1:27017/web-app');
3 |
4 | const userSchema = new mongoose.Schema({
5 | username: String,
6 | email: String
7 | }, {collection: 'users'});
8 |
9 | const userRepository = mongoose.model('users', userSchema, 'users');
10 | module.exports = {
11 | Mongoose: mongoose,
12 | UserRepository: userRepository
13 | };
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "web-app",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "start": "node ./bin/www"
7 | },
8 | "dependencies": {
9 | "cookie-parser": "~1.4.4",
10 | "debug": "~2.6.9",
11 | "ejs": "~2.6.1",
12 | "express": "~4.16.1",
13 | "http-errors": "~1.6.3",
14 | "mongodb": "^4.13.0",
15 | "mongoose": "^6.9.0",
16 | "morgan": "~1.9.1"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/views/user.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Cadastro de Usuário
8 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/views/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | User list
5 |
6 |
7 |
8 |
11 | Lista de Usuários
12 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/routes/index.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 |
4 | /* GET home page. */
5 | router.get('/', async function (req, res, next) {
6 | const db = require('../db');
7 | const docs = await db.UserRepository.find({}).lean().exec();
8 |
9 | res.render('index', {docs});
10 | });
11 |
12 | router.get('/users', function(req, res, next) {
13 | res.render('user', {title:"Cadastro de Usuários"});
14 | });
15 |
16 | router.post('/user', async (req, res, next)=>{
17 | const username = req.body.username;
18 | const email = req.body.email;
19 |
20 | const db = require('../db')
21 | const newUser = new db.UserRepository({ username, email});
22 | try {
23 | await newUser.save();
24 | res.redirect('/');
25 | } catch (error) {
26 | next(error)
27 | }
28 | });
29 |
30 | module.exports = router;
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (https://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # Typescript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 | # next.js build output
61 | .next
62 |
63 | #mongodb space
64 | data
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | var createError = require('http-errors');
2 | var express = require('express');
3 | var path = require('path');
4 | var cookieParser = require('cookie-parser');
5 | var logger = require('morgan');
6 |
7 | var indexRouter = require('./routes/index');
8 | var usersRouter = require('./routes/users');
9 |
10 | var app = express();
11 |
12 | // view engine setup
13 | app.set('views', path.join(__dirname, 'views'));
14 | app.set('view engine', 'ejs');
15 |
16 | app.use(logger('dev'));
17 | app.use(express.json());
18 | app.use(express.urlencoded({ extended: false }));
19 | app.use(cookieParser());
20 | app.use(express.static(path.join(__dirname, 'public')));
21 |
22 | app.use('/', indexRouter);
23 | app.use('/users', usersRouter);
24 |
25 | // catch 404 and forward to error handler
26 | app.use(function(req, res, next) {
27 | next(createError(404));
28 | });
29 |
30 | // error handler
31 | app.use(function(err, req, res, next) {
32 | // set locals, only providing error in development
33 | res.locals.message = err.message;
34 | res.locals.error = req.app.get('env') === 'development' ? err : {};
35 |
36 | // render the error page
37 | res.status(err.status || 500);
38 | res.render('error');
39 | });
40 |
41 | module.exports = app;
42 |
--------------------------------------------------------------------------------
/bin/www:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * Module dependencies.
5 | */
6 |
7 | var app = require('../app');
8 | var debug = require('debug')('web-app:server');
9 | var http = require('http');
10 |
11 | /**
12 | * Get port from environment and store in Express.
13 | */
14 |
15 | var port = normalizePort(process.env.PORT || '3000');
16 | app.set('port', port);
17 |
18 | /**
19 | * Create HTTP server.
20 | */
21 |
22 | var server = http.createServer(app);
23 |
24 | /**
25 | * Listen on provided port, on all network interfaces.
26 | */
27 |
28 | server.listen(port);
29 | server.on('error', onError);
30 | server.on('listening', onListening);
31 |
32 | /**
33 | * Normalize a port into a number, string, or false.
34 | */
35 |
36 | function normalizePort(val) {
37 | var port = parseInt(val, 10);
38 |
39 | if (isNaN(port)) {
40 | // named pipe
41 | return val;
42 | }
43 |
44 | if (port >= 0) {
45 | // port number
46 | return port;
47 | }
48 |
49 | return false;
50 | }
51 |
52 | /**
53 | * Event listener for HTTP server "error" event.
54 | */
55 |
56 | function onError(error) {
57 | if (error.syscall !== 'listen') {
58 | throw error;
59 | }
60 |
61 | var bind = typeof port === 'string'
62 | ? 'Pipe ' + port
63 | : 'Port ' + port;
64 |
65 | // handle specific listen errors with friendly messages
66 | switch (error.code) {
67 | case 'EACCES':
68 | console.error(bind + ' requires elevated privileges');
69 | process.exit(1);
70 | break;
71 | case 'EADDRINUSE':
72 | console.error(bind + ' is already in use');
73 | process.exit(1);
74 | break;
75 | default:
76 | throw error;
77 | }
78 | }
79 |
80 | /**
81 | * Event listener for HTTP server "listening" event.
82 | */
83 |
84 | function onListening() {
85 | var addr = server.address();
86 | var bind = typeof addr === 'string'
87 | ? 'pipe ' + addr
88 | : 'port ' + addr.port;
89 | debug('Listening on ' + bind);
90 | }
91 |
--------------------------------------------------------------------------------