Advertisement
PavelPetrov

PPetrov Nodejs CRUD

Apr 1st, 2019
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. bcrypt = require('bcryptjs');
  2. sqlite3 = require('sqlite3');
  3. db = new sqlite3.Database('7.sqlitedb');
  4. db.serialize();
  5. db.run(`CREATE TABLE IF NOT EXISTS guestbook(
  6.     id INTEGER PRIMARY KEY,
  7.     user TEXT NOT NULL,
  8.     msg TEXT,
  9.     date_created TEXT,
  10.     date_modified TEXT)`
  11. );
  12. db.parallelize();
  13.  
  14. express = require('express');
  15. bodyParser = require('body-parser');
  16. cookieParser = require('cookie-parser');
  17. session = require('express-session');
  18. pug = require('pug');
  19.  
  20. app = express();
  21. app.use(bodyParser.urlencoded({ extended: true }));
  22. app.set('view engine', 'pug');
  23. app.set('views','./');
  24. app.use(cookieParser());
  25. app.use(session({
  26.     secret: 'random string',
  27.     resave: true,
  28.     saveUninitialized: true,
  29. }));
  30. app.listen(8080);
  31.  
  32. //users = {ivan: '123', radka: '888', nasko:'777'};
  33. //bcrypt.hash('123', 5, (err, hash) => {console.log(hash);});
  34.  
  35. users = {
  36.     ivan: '$2a$05$FIsj86AKAr5JnYg6DujY4.96JBPQCBT/POVh5LJH3hea6I3UvG5D6',
  37.     radka: '$2a$05$zcGdceWWgx8zoAeznnRC2.j5HsZH4Z2W1AOIv/aYCWsDIs4QU6iMa',
  38.     nasko:'$2a$05$6OBgnb6tpI4GmlrTvaxPB.fR0QhOieMyvN4EDmhSacU4bP0TsqzGW'
  39. };
  40.  
  41. app.get('/login', function(req, res) {
  42.     //pug.render(login);
  43.     res.send(pug.render(login, {info: 'PLEASE LOGIN'}));
  44. });
  45.  
  46. app.post('/login', function(req, res){
  47.     bcrypt.compare(req.body.password, users[req.body.username] || "", function(err, is_match) {
  48.         if(err) throw err;
  49.         if(is_match === true) {
  50.             req.session.username = req.body.username;
  51.             req.session.count = 0;
  52.             res.redirect("/guestbook");
  53.         } else {
  54.             res.send(pug.render(login, {warn: 'TRY AGAIN'}));
  55.         }
  56.     });
  57. });
  58.  
  59. app.get('/logout', (req, res) => {
  60.     req.session.destroy();
  61.     res.redirect("/");
  62. });
  63.  
  64. app.all('*', function(req, res, next) {
  65.     if(req.session.username) return next();
  66.     else res.redirect("/login");
  67. });
  68.  
  69. //CRUD
  70. //cREADud
  71. app.get('/guestbook', (req, res) => {
  72.     req.session.count++;
  73.     s = "User: " + req.session.username + " Count: " + req.session.count;
  74.     s += " :: <a href=''>reload</a> :: <a href='logout'>LOGOUT</a> :: ";
  75.     s += new Date();
  76.     let rows = [];
  77.     db.all('SELECT * FROM guestbook;', function(err, rows) {
  78.         if(err) throw err;
  79.         res.send(pug.render(secret, {'info': s, rows: rows}));
  80.     });
  81. });
  82.  
  83. //CREATErud
  84. app.post('/save',(req, res) => {
  85.     db.run(`
  86.         INSERT INTO guestbook(
  87.             user,
  88.             msg,
  89.             date_created,
  90.             date_modified
  91.         ) VALUES (
  92.             ?,
  93.             ?,
  94.             DATETIME('now','localtime'),
  95.             DATETIME('now','localtime'));
  96.         `,
  97.         [req.session.username, req.body.msg || ""],
  98.         (err) => {
  99.             if(err) throw err;
  100.             res.redirect('/guestbook');
  101.         });
  102. });
  103.  
  104. //cruDELETE
  105. app.post('/delete',(req, res) => {
  106.     db.run('DELETE FROM guestbook WHERE id = ?', req.body.id, (err) => {
  107.         if(err) throw err;
  108.         res.redirect('/guestbook');
  109.     });
  110. });
  111.  
  112. //crUPDATEd GET
  113. app.get('/update',(req, res) => {
  114.     db.get('SELECT * FROM guestbook WHERE id = ?;', req.query.id, (err, row) => {
  115.         if(err) throw err;
  116.         res.send(pug.render(secret, {edit: true, id: row.id, msg: row.msg}));
  117.     });
  118. });
  119.  
  120. //crUPDATEd POST
  121. app.post('/update',(req, res) => {
  122.     db.run(`UPDATE guestbook
  123.             SET user = ?,
  124.                 msg = ?,
  125.                 date_modified = DATETIME('now','localtime')
  126.             WHERE id = ?;`,
  127.         req.session.username,
  128.         req.body.msg,
  129.         req.body.id,
  130.         (err) => {
  131.             if(err) throw err;
  132.             res.redirect('/guestbook');
  133.     });
  134. });
  135.  
  136.  
  137. app.all('*', function(req, res) {
  138.     res.send("No such page! Go to: <a href='/guestbook'>main page</a>");
  139. });
  140.  
  141. login = `
  142. html
  143.     head
  144.         link(rel="stylesheet", href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css")
  145.     body
  146.         if info
  147.             h1.alert.alert-info=info
  148.         if warn
  149.             h1.alert.alert-warning #{warn}
  150.         form.mx-auto.border.border-primary.w-25.p-3(method="post")
  151.             div.form-group
  152.                 label Username:
  153.                 input.form-control(type="text" name="username" placeholder=" Enter user name ")
  154.             div.form-group
  155.                 label Password:
  156.                 input.form-control(type="password" name="password")
  157.             div.form-group
  158.                 input.btn.btn-primary(type="submit" value="Login")
  159. `;
  160.  
  161. secret = `
  162. html
  163.     head
  164.         link(rel="stylesheet", href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css")
  165.     body
  166.         if info
  167.             h1.alert.alert-info!= info
  168.         unless edit
  169.             form.mx-auto.border.border-primary.w-25.p-3(method="post" action="/save")
  170.                 div.form-group
  171.                     label New message:
  172.                     textarea.form-control(name="msg" placeholder=" Your message ")
  173.                 div.form-group
  174.                     button.btn.btn-primary(type="submit") SAVE     
  175.         else
  176.             form.mx-auto.border.border-primary.w-25.p-3(method="post" action="/update")
  177.                 input(type="hidden" name="id" value=id)
  178.                 div.form-group
  179.                     label Edit message:
  180.                     textarea.form-control(name="msg")=msg
  181.                 div.form-group
  182.                     button.btn.btn-success(type="submit") UPDATE
  183.                     button.btn.btn-dark(type="reset") RESET
  184.                     a.btn.btn-danger(href="/guestbook") CANCEL
  185.         if rows
  186.             table.table.table-striped.table-hover
  187.                 thead.bg-warning.text-uppercase.font-weight-bold
  188.                     tr
  189.                         td id
  190.                         td user
  191.                         td msg
  192.                         td date_created
  193.                         td date_modified
  194.                         td action
  195.                 tbody
  196.                     each row in rows
  197.                         tr
  198.                             td= row.id
  199.                             td= row.user
  200.                             td
  201.                                 pre= row.msg
  202.                             td= row.date_created
  203.                             td= row.date_modified
  204.                             td
  205.                                 div.row
  206.                                     form(method="get" action="/update")
  207.                                         input(type="hidden" name="id" value=row.id)
  208.                                         button.btn.btn-info(type="submit") EDIT
  209.                                     span &nbsp;&nbsp;&nbsp;
  210.                                     form(method="post" action="/delete")
  211.                                         input(type="hidden" name="id" value=row.id)
  212.                                         button.btn.btn-danger(type="submit") X
  213. `;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement