Node.js + Express 4.x + MongoDB 构建登录注册(一)

  网上的资料基本都是express3.x的,语法上和express4.x差别比较大,零零散散也不集中,为此头疼了很久。

  前人种树,后人乘凉。分享给大家,也总结给自己。

一、软件环境

  Window10

  npm  v3.10.10

  Node.js  v6.10.1

  Express  v4.15.0

二、搭建

  调出“命令提示符”,执行:express -e demo  //Express框架会自动创建项目在demo文件夹下。

  (ps:Window系统叫“命令提示符”,Mac系统叫“终端”)

  然后根据提示执行:cd dmeo  //进入新建的项目文件

  执行:npm install  //系统会根据package.json自动下载依赖包

  最后执行:npm start  //启动项目

  打开浏览器,输入地址:localhost:3000

  页面“Welcome to Express”,项目搭建成功。

三、修改html

  打开项目文件夹里的“views”文件夹,看到里面有两个页面“error.ejs”和“index.ejs”。

  我们想加载html文件,这么干。

  将“error.ejs”和“index.ejs”,改为“error.html”和“index.html”,如果现在启动项目会报错。

  再打开app.js文件,注释一句,加上两句,如下:

//app.set('view engine','ejs');  //注释这句

//加上下面两句
app.engine('.html',require('ejs').__express);
app.set('view engine','html');

  然后再启动项目,“Welcome to Express” 又再次出现。

四、安装nodemon

  在“命令提示符”窗口,Ctrl+c 停止项目。

  执行:npm install nodemon

  安装以后,每次代码做出修改,不用反复停止、启动服务看效果了,直接刷新页面即可。

  光安装nodemon还不够,打开app.js文件,注释最下面的一行代码:

//module.exports=app;  //注释这句

//增加这句
app.listen(3000);

  现在启动项目,不再是“npm start”命令,而是“nodemon app.js”。

  熟悉的“Welcome to Express” 又出现了。

五、登录

  准备工作都做完了,下面开始增加“登录”。

  打开“index.html”文件,什么都不用改,只增加a标签:

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
    <a href="/login">登录</a>
  </body>
</html>

  (ps:下面这两句,只是说明,没有修改。)

var index = require('./routes/index');

app.use('/', index);

//app.js 里面的这两句,就是将所有的请求都指向index.js,再由不同的route响应不同的请求

  打开“routes”文件夹,这里面放着路由器,可以理解成MVC里的C,里面有个“index.js”,如下:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

//响应login请求
router.route('/login').get(function(req,res)
{
    res.render('login',{title:'Login'});
}).post(function(req,res)
{
    //因为还没有连数据库,这里先做一个假数据,用于验证登录
    let user={username:'admin',password:'123'};
    //request获取页面表单数据
    if(req.body.username==user.username&&req.body.password==user.password)
    {
        //重定向到Home页面
        return res.redirect('home');
    }
    else
    {
        //重定向到Login页面
        return res.redirect('login');
    }
});

//登录通过以后,进入Home页面
router.get('/home',function(req,res)
{
    //假数据,用来在Home页面显示用户名
    let user={username:'admin',password:'123'};
    //将user对象放入response响应中
    return res.render('Home',{title:'Home',user:user});
});

//Home页面的“注销”功能
router.get('/logout',function(res,res)
{
    return res.redirect('/');
});

module.exports = router;

  在“views”文件夹下新建“login.html”:(ps:class样式,大家随意。“注册”的a标签,可以先加上放在这,页面上点击会报404错,别手贱。)

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <form action="" method="post">
            <div class="fuzq_input_wrap">
                <label for="">用户名:</label>
                <input type="text" id="username" name="username" autofocus="" required="" />
            </div>
            <div class="fuzq_input_wrap">
                <label for="">密码:</label>
                <input type="password" id="password" name="password" required="" />
            </div>
            <div class="fuzq_btn_wrap">
                <button type="submit">提交</button>
            </div>
            <div class="fuzq_input_wrap">
                <a href="/register">还没有账号?去注册!</a>
            </div>
        </form>
  </body>
</html>

  新建“home.html”页面:

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome <%=user.username %> to <%= title %></p>
    <a href="/logout">注销</a>
  </body>
</html>

  现在,再刷新index.html页面,登录的功能基本搞定!

  为什么是“基本”搞定,因为数据是假的,而且login和home的数据,是两个user对象。

  预知后事如何,下回再写。

posted @ 2017-04-17 15:05  子非魚87  阅读(1054)  评论(2编辑  收藏  举报