Browse Source

nodeHW new

Ponomarenko.Oleg 6 years ago
parent
commit
3cf977e7eb

+ 57 - 0
nodeHW/blogApp/controller/homeController.js

@@ -0,0 +1,57 @@
+const path = require("path");
+const UserModel = require("../model/user");
+
+module.exports = {
+    getHomePage(req, res, next){
+        try{
+            let user = null;
+
+            if (req.isAuthenticated()){
+                user = req.user;
+            }
+            res.render(path.resolve(__dirname, "../view/home.ejs"),{
+                user: user
+            });
+        } catch(err){
+            next(err);
+        }
+    },
+    getAboutPage(req, res, next){
+        try{
+            res.render(path.resolve(__dirname, "../view/about.ejs"));
+        } catch(err) {
+            next(err);
+        }
+    },
+
+//TODO вынести в отдельный controller все что ниже 
+
+    getSignUpPage(req, res, next){
+        try{
+            res.render(path.resolve(__dirname, "../view/signup.ejs"));
+        } catch(err) {
+            next(err);
+        }
+    },
+    signup(req, res, next){
+        try{
+            let user = UserModel.create(req.body.email, req.body.username, req.body.password);
+        } catch(err) {
+            next(err);
+        }
+    },
+    getLoginPage(req,res, next){
+        try{
+            res.render(path.resolve(__dirname, "../view/login.ejs"));
+        } catch(err) {
+            next(err);
+        }
+    },
+    login(req, res, next){
+        try{
+            res.redirect("/");
+        } catch(err) {
+            next(err);
+        }
+    }
+};

+ 33 - 0
nodeHW/blogApp/middleware/passport.js

@@ -0,0 +1,33 @@
+const passport = require("passport");
+const LocalStrategy = require("passport-local").Strategy;
+const UserModel = require("../model/user");
+
+passport.serializeUser(function(user, done){
+    done(null, user.email);
+});
+
+passport.deserializeUser(function(email, done){
+    let user = UserModel.find(email);
+    done(null, user);
+});
+
+passport.use(new LocalStrategy({
+    usernameField: "email",
+    passwordField: "password"
+ }, (email, password, done) => {
+    try{
+        let user = UserModel.find(email);
+        if(!user) {
+            return done(null, false, { message: 'Incorrect password.'});
+        }
+        if(user.password !== password){
+            return done(null, false, { message: 'Incorrect password.'});
+        }
+        return done(null, user);
+    }catch(err){
+        done(err);
+    }
+}));
+
+module.exports = passport;
+

+ 31 - 0
nodeHW/blogApp/model/db.js

@@ -0,0 +1,31 @@
+const mongoose = require('mongoose');
+mongoose.Promise = require('bluebird');
+mongoose.connect('mongodb://localhost:27017/blogtest', {
+//   useMongoClient: true
+})
+const db = mongoose.connection;
+db.on('error', err => {
+    console.log('error', err)
+  });
+db.once('open', () => {
+    console.log('we are connected')
+  });
+// mongoose.connect('mongodb://localhost:27017/blogtest');
+// const Schema = mongoose.Schema;
+
+// console.log("mongoose_version_is_"+mongoose.version);
+
+// const blogSchema = new Schema({
+//   title:  String,
+//   author: String,
+//   body:   String,
+//   comments: [{ body: String, date: Date }],
+//   date: { type: Date, default: Date.now },
+//   hidden: Boolean,
+//   meta: {
+//     votes: Number,
+//     favs:  Number
+//   }
+// });
+
+// const Blog = mongoose.model('Blog', blogSchema);

+ 117 - 0
nodeHW/blogApp/model/user.js

@@ -0,0 +1,117 @@
+// const _ = require("lodash");
+// const users = [{
+//     email: "a@a.com",
+//     username: "Alex",
+//     password: "pass"
+// }];
+
+// module.exports = {
+//     create(email, username, password){
+//         let user = {
+//             email,
+//             username,
+//             password
+//         };
+
+//         users.push(user);
+
+//         return user;
+//     },
+//     find(email){
+//         return _.find(users, (user) => {
+//             return user.email === email;
+//         });
+//     }
+// }
+
+// const mongoose = require('mongoose');
+// const Schema = mongoose.Schema;
+
+// const userSchema = new Schema
+
+
+// const mongoose = require('mongoose');
+// mongoose.connect('mongodb://localhost:27017/blog');
+
+// const Cat = mongoose.model('Cat', { name: String });
+
+// const kitty = new Cat({ name: 'Zildjian' });
+// kitty.save().then(() => console.log('meow'));
+
+
+// const mongoose = require('mongoose');
+// const Schema = mongoose.Schema;
+
+// const blogSchema = new Schema({
+//   title:  String,
+//   author: String,
+//   body:   String,
+//   comments: [{ body: String, date: Date }],
+//   date: { type: Date, default: Date.now },
+//   hidden: Boolean,
+//   meta: {
+//     votes: Number,
+//     favs:  Number
+//   }
+// });
+
+
+
+// const mongoose = require('mongoose');
+// const Schema = mongoose.Schema;
+// const User2 = new mongoose.Schema({
+//     username : {
+//         type: String,
+//         unique: true,
+//         required: true
+//     },
+//     password : {
+//         type: String,
+//         required: true
+//     }
+// })
+
+// module.exports = mongoose.model('User2', User2)
+
+
+
+// const userSchema = new Schema({ name: String, type: String });
+// userSchema.index({ name: 1, type: -1 }); 
+// console.log(User2);
+
+// userSchema.methods.findSimilarTypes = function(cb) {
+//     return this.model('User2').find({ type: this.type }, cb);
+//   };
+
+//   const User2 = mongoose.model('User2', userSchema);
+//   const user = new User2({ type: 'dog' });
+
+//   dog.findSimilarTypes(function(err, dog) {
+//     console.log(dog); // woof
+//   });
+
+const mongoose = require('mongoose')
+
+const userSchema = mongoose.Schema({
+  name: String,
+  email: String,
+  age: Number
+})
+
+const User = mongoose.model('User', userSchema)
+
+module.exports = User;
+
+const user = new User({name: 'Alex', email:'a@sss', age: 34})
+console.log('user', user);
+
+user.save((err, user) => {
+    if (err) {
+      console.log('err', err)
+    }
+    console.log('saved user', user)
+  });
+
+User.findById('59d8acf4ce867b292ddb815e', (err, user) => {
+    console.log('result', err, user)
+  });

File diff suppressed because it is too large
+ 2201 - 0
nodeHW/blogApp/package-lock.json


+ 26 - 0
nodeHW/blogApp/package.json

@@ -0,0 +1,26 @@
+{
+  "name": "blogapp",
+  "version": "1.0.0",
+  "description": "",
+  "main": "server.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1",
+    "start": "nodemon server.js"
+  },
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "bluebird": "^3.5.1",
+    "body-parser": "^1.18.3",
+    "ejs": "^2.6.1",
+    "express": "^4.16.3",
+    "express-session": "^1.15.6",
+    "lodash": "^4.17.10",
+    "mongoose": "^5.1.1",
+    "passport": "^0.4.0",
+    "passport-local": "^1.0.0"
+  },
+  "devDependencies": {
+    "nodemon": "^1.17.4"
+  }
+}

+ 0 - 0
nodeHW/blogApp/public/app.css


+ 0 - 0
nodeHW/blogApp/public/app.js


+ 25 - 0
nodeHW/blogApp/router/home.js

@@ -0,0 +1,25 @@
+const path = require("path");
+const express = require("express");
+const router = express.Router();
+const homeController = require("../controller/homeController");
+const passport = require("../middleware/passport");
+
+router.get("/", homeController.getHomePage);
+
+router.get("/about", homeController.getAboutPage);
+
+router.get("/signup", homeController.getSignUpPage);
+
+router.post("/signup", (req, res, next) => {
+    //Реализуйте здесь валидацию данных отправленных с формы.
+    next();
+}, homeController.signup);
+
+router.get("/login", homeController.getLoginPage);
+
+router.post("/login", (req, res, next) => {
+    //Реализуйте здесь валидацию данных отправленных с формы.
+    next();
+}, passport.authenticate("local"), homeController.login);
+
+module.exports = router;

+ 4 - 0
nodeHW/blogApp/router/index.js

@@ -0,0 +1,4 @@
+
+module.exports = (app) => {
+    app.use(require("./home"));
+};

+ 28 - 0
nodeHW/blogApp/server.js

@@ -0,0 +1,28 @@
+const path = require("path");
+const express = require("express");
+const expressSession = require("express-session");
+const registerRoutes = require("./router");
+const bodyParser = require("body-parser");
+const passport = require("./middleware/passport");
+const User = require('./model/user');
+require("./model/db");
+const PORT = 7080;
+
+const app = express();
+
+app.use(bodyParser.urlencoded());
+app.use(bodyParser.json());
+
+app.use(express.static(path.resolve(__dirname, "./public")));
+app.use(expressSession({ secret: "mySecret", resave: false, saveUnitialialized: false }));
+app.use(passport.initialize());
+app.use(passport.session());
+
+app.set("view engine", "ejs");
+
+registerRoutes(app);
+
+app.listen(7080, () => {
+    console.log(`blog started on port ${PORT}`);
+});
+

+ 14 - 0
nodeHW/blogApp/view/about.ejs

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>About</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link rel="stylesheet" type="text/css" media="screen" href="app.css" />
+    <script src="app.js"></script>
+</head>
+<body>
+    <h1>ABOUT page</h1>
+</body>
+</html>

+ 21 - 0
nodeHW/blogApp/view/home.ejs

@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>Home page</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link rel="stylesheet" type="text/css" media="screen" href="app.css" />
+    <script src="app.js"></script>
+</head>
+<body>
+    <% if (user) { %>
+        <h1>Привет, <%= user.username %></h1>
+    <% } else { %>
+        <a href="/login">Log in</a>
+        <a href="/signup">Sign up</a>
+    <% } %>
+
+    <a href="/about">About</a>
+</body>
+</html>

+ 27 - 0
nodeHW/blogApp/view/login.ejs

@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>Login</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link rel="stylesheet" type="text/css" media="screen" href="app.css" />
+    <script src="app.js"></script>
+</head>
+<body>
+    
+        <form method="POST" action="/login">   
+            <div>
+                <label>Email</label>
+                <input name="email" type="email" placeholder="email"/>
+            </div>
+            <div>
+                <label>Password</label>
+                <input name="password" type="password" placeholder="password"/>
+            </div>
+            <div>
+                <input type="submit" value="Log in">
+            </div>
+        </form>
+</body>
+</html>

+ 34 - 0
nodeHW/blogApp/view/signup.ejs

@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>Signup</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link rel="stylesheet" type="text/css" media="screen" href="app.css" />
+    <script src="app.js"></script>
+</head>
+<body>
+    <form method="POST" action="/signup">
+        <div>
+            <label for="username">Name</label>
+            <input id="username" name="username" type="text" placeholder="name"/>
+        </div>      
+        <div>
+            <label>Email</label>
+            <input name="email" type="email" placeholder="email"/>
+        </div>
+        <div>
+            <label>Password</label>
+            <input name="password" type="password" placeholder="password"/>
+        </div>
+        <div>
+            <label>Confirm password</label>
+            <input name="confirmPassword" type="password" placeholder="confirm password"/>
+        </div>
+        <div>
+            <input type="submit" value="Sign up"/>
+        </div>
+    </form>
+</body>
+</html>