nodejs 学习(4) express+mongoose

一、关于安装和启动:

1、设置环境变量:D:Program FilesMongoDBin

2、启动时需要cd到bin 目录,然后 mongod --dbpath "D:mongdbdata"设置数据库存储路径

二、例子(登录注册表单)

1


2 index.js

var express=require("express"),
    bodyParser=require('body-parser'),
    multer=require('multer'),
    mongoose=require('mongoose'),
    cookieParser = require('cookie-parser'),
    session = require('express-session'),
    app=express();


var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my-website');
db = mongoose.connection;
db.once('open', function callback () {
  console.log("yah");
}); 
var kittySchema = mongoose.Schema({
 first: String,
 last: String,
 email: {type:String,unique:true},
 password:{type:String,index:true}
});
var User = mongoose.model('user', kittySchema);


app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(multer()); // for parsing multipart/form-data
app.use(cookieParser());
app.use(session({
  secret: 'my secret',
  resave: false,
  saveUninitialized: true
}));


app.set("view engine","jade");


app.use(function(req,res,next){
    if(req.session.loggedIn){
        res.locals.authenticated=true;
        User.findById(req.session.loggedIn,function(err,doc){

            if(err){
                return next(err);
            }
            if(doc){
                res.locals.me=doc;
            }
            next();
        });
    }else{
        res.locals.authenticated=false;
        next();
    }
});

app.get("/",function(req,res){
    res.render('index');
});

app.get("/login",function(req,res){
    res.render("login");
})


app.get("/signup",function(req,res){
    res.render("signup");
});

app.post("/signup",function(req,res,next){
    var user = new User(req.body.user);
    user.save(function(err){
        if(err) return next(err);
        res.redirect("/login/"+user["email"]);
    });
});

app.get("/login/:signupEmail",function(req,res){
    res.render('login',{signupEmail:req.params.signupEmail});
});

app.post("/login",function(req,res){
    User.findOne({"email":req.body.user.email,"password":req.body.user.password},function(err,doc){
         if(err){
             return next(err);
         }
         if(!doc){
             return res.send("<p>User not found.Go back and try again</p>");
         }
         var sess=req.session;
         req.session.loggedIn=doc._id.toString();
         res.redirect("/");
    });
});

app.get("/logout",function(req,res){
    var sess=req.session;
    req.session.loggedIn="",
    res.redirect("/");
});

app.listen(3000,function(){
    console.log("app listening on *:3000");
});

3 模板 (注意缩进)

3.1 layout.jade

doctype html
html
    head
        title MongoDB example
    body
        h1     My first MongoDB app
        hr
        block body

3.2 index.jade

extends layout
block body
    if (authenticated)
        p Welcome back,#{me.first}
        a(href="/logout") Logout
    else
        p Welcome new visitor!
        ul
            li: a(href="/login") Login
            li: a(href="/signup") Signup

3.3 login.jade

extends layout
block body
    form(action="/login",method="POST")
        fieldset
            legend Log in
            if(signupEmail)
                p 
                    Congratulations on signing up! Please login below.
                    input(name="user[email]",type="text",value=signupEmail)
            else
                p
                    label Email
                    input(name="user[email]",type="text")
            p
                label Password
                input(name="user[password]",type="password")
            p
                button Submit
            p
                a(href="/") Go back

3.4 signup.jade

extends layout
block body
    form(action="/signup",method="POST")
        fieldset
            legend Sign 
            p
                label First
                input(name="user[first]",type="text")
            p
                label last
                input(name="user[last]",type="text")
            p
                label Email
                input(name="user[email]",type="text")
            p
                label Password
                input(name="user[password]",type="password")
            p
                button Submit
            p
                a(href="/") Go back
原文地址:https://www.cnblogs.com/qianlegeqian/p/4238907.html