Node.js Express连接mysql完整的登陆注册系统(windows)

windows学习环境:

node 版本: v0.10.35

express版本:4.10.0

mysql版本:5.6.21-log

第一部分:安装node 、Express(win8系统 需要"命令行【管理员】"执行" msiexec+/package+安装包路径 "安装,否则会安装失败)

   1)、下载nodejs,官方下载地址:http://nodejs.org/

   2)、安装过程,选择下一步直到安装完成。(node -v | npm-v //查看版本)

   3)、打开命令行执行命令 "npm install -g express-generator等待安装完成就好了。(express -V//查看版本)

            Node.js Express连接mysql完整的登陆注册系统(windows)_第1张图片       Node.js Express连接mysql完整的登陆注册系统(windows)_第2张图片

第二部分:

     概览:

          1、新建一个工程 

          2、在views目录下新建ejs模板网页

          3、连接mysql数据库dbConnect.js

          4、配置app.js 和 package.json

          5、配置路由(2种方式)

          6、加入session和cookies

  详细内容:

         NO 1. 新建工程

             ①、cd到要创建工程的目录: cd: NewCode\Node

              

             ②、使用express创建工程: express -e ejs testA

              

             ③、cd到testA: cd testA

               

             ④、安装node_modules:  npm install(这个过程有点慢)

               

             ⑤、启动工程: npm start

               

             ⑥、打开浏览器访问:http://localhost:3000(默认端口是3000)

               Node.js Express连接mysql完整的登陆注册系统(windows)_第3张图片

 

 

         NO2.

          在views目录下新建ejs模板: index.ejs(已有), error.ejs(已有),  header.ejs,  footer.ejs,  home.ejs,  login.ejs,  reg.ejs      如下图:

            Node.js Express连接mysql完整的登陆注册系统(windows)_第4张图片

                 代码如下:

复制代码
 1 
 2 
 3 
 4 
 5 Test
 6 
 7 
 8 
 9 
10

<%= title %>

11
12 17
复制代码
1 
2 
3 
复制代码
 1 <%- include header %>
 2 
3
4
5 <% if(locals.islogin) { %> 6 用户:

<%= test %>

已经登陆。
7 登出 8 <% } else{ %> 9
10 11
12 13
14
15
16 17
18 19
20
21
22
23 24
25
26 <% } %> 27
28
29
30 <%- include footer %>
复制代码
复制代码
 1 <%- include header %>
 2 
3
4
5 6
7 8
9 10
11
12
13 14
15 16
17
18
19
20 21
22
23
24
25
26 <%- include footer %>
复制代码
1  <% include header %>
2  用户:<%= user %>

欢迎登录!!

3 退出 4 <% include footer %>
复制代码
1 <%- include header %>
2    <% if(locals.islogin){%>
3   用户:

<%= test %>

已经登陆 4 <% }else{%> 5

登录

6 <%}%> 7 <%- include footer %>
复制代码

 

         NO 3.  连接mysql数据库dbConnect.js

            在node_modules目录下创建一个文件夹dao存放dbConnect.js,目录为: /node_modules/dao/dbConnect.js

   

复制代码
 1 var mysql=require('mysql');
 2 
 3 function connectServer(){
 4 
 5     var client=mysql.createConnection({
 6         host:'localhost',
 7         user:'root',
 8         password:'abc123456',
 9         database:'dby'
10     })
11 
12     return client;
13 }
14 
15 
16 function  selectFun(client,username,callback){
17     //client为一个mysql连接对象
18     client.query('select password from table_1 where username="'+username+'"',function(err,results,fields){
19         if(err) throw err;
20 
21         callback(results);
22     });
23 }
24 
25 function insertFun(client , username , password,callback){
26     client.query('insert into table_1 value(?,?)', [username, password], function(err,result){
27         if( err ){
28             console.log( "error:" + err.message);
29             return err;
30         }
31           callback(err);
32     });
33 }
34 
35 exports.connect = connectServer;
36 exports.selectFun  = selectFun;
37 exports.insertFun = insertFun;
复制代码

         NO 4. 配置app.js  ,  package.json

           其中注明有:  // 需要添加的  和  //需要修改的

复制代码
 1 var express = require('express');
 2 var path = require('path');
 3 var favicon = require('serve-favicon');
 4 var logger = require('morgan');
 5 var cookieParser = require('cookie-parser');
 6 var bodyParser = require('body-parser');
 7 var routes = require('./routes/index');
 8 var users = require('./routes/users');
 9 //  需要添加的
10 var session=require('express-session');
11 
12 
13 
14 var app = express();
15 
16 // view engine setup
17 app.set('views', path.join(__dirname, 'views'));
18 app.set('view engine', 'ejs');
19 
20 app.use(logger('dev'));
21 app.use(bodyParser.json());
22 app.use(bodyParser.urlencoded({ extended: false }));
23 
24 //需要修改的
25 app.use(cookieParser("An"));
26 //需要添加的
27 app.use(session({
28     secret:'an',
29     resave:false,
30     saveUninitialized:true
31 }));
32 
33 
34 app.use(express.static(path.join(__dirname, 'public')));
35 
36 app.use('/', routes);
37 app.use('/users', users);
38 
39 // catch 404 and forward to error handler
40 app.use(function(req, res, next) {
41     var err = new Error('Not Found');
42     err.status = 404;
43     next(err);
44 });
45 
46 // error handlers
47 
48 // development error handler
49 // will print stacktrace
50 if (app.get('env') === 'development') {
51     app.use(function(err, req, res, next) {
52         res.status(err.status || 500);
53         res.render('error', {
54             message: err.message,
55             error: err
56         });
57     });
58 }
59 
60 // production error handler
61 // no stacktraces leaked to user
62 app.use(function(err, req, res, next) {
63     res.status(err.status || 500);
64     res.render('error', {
65         message: err.message,
66         error: {}
67     });
68 });
69 
70 module.exports = app;
复制代码
复制代码
 1 {
 2   "name": "test4",
 3   "version": "0.0.0",
 4   "private": true,
 5   "scripts": {
 6     "start": "node ./bin/www"
 7   },
 8   "dependencies": {
 9     "express": "~4.10.6",
10     "body-parser": "~1.10.1",
11     "cookie-parser": "~1.3.3",
12     "morgan": "~1.5.1",
13     "serve-favicon": "~2.2.0",
14     "debug": "~2.1.1",
15     "ejs": "~1.0.0",
16       //需要添加的,也可以从其他地方拷贝到node_modules目录下
17     "mysql":"latest",
18     "express-session":"latest"
19   }
20 }
复制代码

 

         NO 5. 配置路由

         第一种方式:全部路由规则集中写在 routes目录下的index.js文件中,代码如下:

         

复制代码
 1 var express = require('express');
 2 var router = express.Router();
 3 var usr=require('dao/dbConnect');
 4 
 5 /* GET home page. */
 6 router.get('/', function(req, res) {
 7     if(req.cookies.islogin){
 8         req.session.islogin=req.cookies.islogin;
 9     }
10 if(req.session.islogin){
11     res.locals.islogin=req.session.islogin;
12 }
13   res.render('index', { title: 'HOME',test:res.locals.islogin});
14 });
15 
16 
17 router.route('/login')
18     .get(function(req, res) {
19         if(req.session.islogin){
20             res.locals.islogin=req.session.islogin;
21         }
22 
23         if(req.cookies.islogin){
24             req.session.islogin=req.cookies.islogin;
25         }
26         res.render('login', { title: '用户登录' ,test:res.locals.islogin});
27     })
28     .post(function(req, res) {
29         client=usr.connect();
30         result=null;
31         usr.selectFun(client,req.body.username, function (result) {
32             if(result[0]===undefined){
33                 res.send('没有该用户');
34             }else{
35                 if(result[0].password===req.body.password){
36                     req.session.islogin=req.body.username;
37                     res.locals.islogin=req.session.islogin;
38                     res.cookie('islogin',res.locals.islogin,{maxAge:60000});
39                     res.redirect('/home');
40                 }else
41                 {
42                     res.redirect('/login');
43                 }
44                }
45         });
46     });
47 
48 router.get('/logout', function(req, res) {
49     res.clearCookie('islogin');
50     req.session.destroy();
51     res.redirect('/');
52 });
53 
54 router.get('/home', function(req, res) {
55     if(req.session.islogin){
56         res.locals.islogin=req.session.islogin;
57     }
58     if(req.cookies.islogin){
59         req.session.islogin=req.cookies.islogin;
60     }
61     res.render('home', { title: 'Home', user: res.locals.islogin });
62 });
63 
64 router.route('/reg')
65     .get(function(req,res){
66         res.render('reg',{title:'注册'});
67     })
68     .post(function(req,res) {
69         client = usr.connect();
70 
71         usr.insertFun(client,req.body.username ,req.body.password2, function (err) {
72               if(err) throw err;
73               res.send('注册成功');
74         });
75     });
76 
77 module.exports = router;
复制代码

        第二种方式: 每一个views目录下有的ejs文件,都在 routes目录下 建立对应的.js路由控制器,目录:

          Node.js Express连接mysql完整的登陆注册系统(windows)_第5张图片

            这种方式需要在app.js中指定路由路径,示例如下:

            

复制代码
 1 //需要添加的
 2 var a=require('./routes/a');
 3 var b=require('./routes/b');
 4 var c=require('./routes/c');
 5 
 6          ...
 7  var app=Express();
 8          ...
 9 
10 //需要添加的
11 app.use('/a',a);
12 app.use('/b',b);
13 app.use('/c',c);
复制代码

 

         NO 6.加入session 和 cookies

      ①、在package.json中添加mysql 和  express-session,添加内容:

         package.json里面的注释不能有,需要删除

1     //需要添加的,也可以从其他地方拷贝到node_modules目录下
2     "mysql":"latest",
3     "express-session":"latest"

     ②、执行命令安装,必须先cd到指定的工程目录下,命令: npm install  (示例如下,工程为:testA)

     

     

     安装后的目录:

   Node.js Express连接mysql完整的登陆注册系统(windows)_第6张图片 

    ③、修改app.js,添加和修改代码:

       

复制代码
 1 //  需要添加的, 在[ var app = express(); ] 上方
 2 var session=require('express-session');
 3 
 4 var app = express();
 5 
 6 //需要修改的
 7 app.use(cookieParser("An"));
 8 
 9 //需要添加的, 在[ var app = express(); ] 下方
10 app.use(session({
11     secret:'an',
12     resave:false,
13     saveUninitialized:true
14 }));
复制代码

 

    ④、路由控制器routes中index.js的session和cookies,  router.route('/login') :

     

复制代码
 1 router.route('/login')
 2     .get(function(req, res) {
 3         if(req.session.islogin){
 4             res.locals.islogin=req.session.islogin;
 5         }
 6 
 7         if(req.cookies.islogin){
 8             req.session.islogin=req.cookies.islogin;
 9         }
10         res.render('login', { title: '用户登录' ,test:res.locals.islogin});
11     })
12     .post(function(req, res) {
13         client=usr.connect();
14         result=null;
15         usr.selectFun(client,req.body.username, function (result) {
16             if(result[0]===undefined){
17                 res.send('没有该用户');
18             }else{
19                 if(result[0].password===req.body.password){
20                     req.session.islogin=req.body.username;
21                     res.locals.islogin=req.session.islogin;
22                     res.cookie('islogin',res.locals.islogin,{maxAge:60000});
23                     res.redirect('/home');
24                 }else
25                 {
26                     res.redirect('/login');
27                 }
28                }
29         });
30     });
复制代码

 

    ⑤、前端的session使用,views目录下的login.ejs:

 

复制代码
 1 <%- include header %>
 2 
3
4
5 <% if(locals.islogin) { %> 6 用户:

<%= test %>

已经登陆。
7 登出 8 <% } else{ %> 9
10 11
12 13
14
15
16 17
18 19
20
21
22
23 24
25
26 <% } %> 27
28
29
30 <%- include footer %>
复制代码

    ⑥、对于session和cookies的经验:

            session:单一的session使用在一次回话中,session会保存直到浏览器关闭。

                  写入session:         

                             req.session.islogin="write";
                             res.locals.islogin=req.session.islogin;

                 使用session(前端):

                         <%    if(locals.islogin){  %>

                                     session为真。

                         <%  }else{  %>

                                      <%-  include html引用  %>

                                 <% } %>       

               cookie: cookie是为session服务的,cookie依赖session:

                     写入cookie:

                               res.cookie('islogin','wirteCookie',{maxAge:60000});     //毫秒为单位

                    使用cookie(路由控制器端):

                                if(req.cookies.islogin){               req.session.islogin=req.cookies.islogin;   }

                                if(req.session.islogin){               res.locals.islogin=req.session.islogin;      } 

   源码下载链接:http://pan.baidu.com/s/1ntkmCmH

初学Node.js,不到之处,恳请包涵。

转自: http://www.cnblogs.com/allsmy/p/4221593.html

你可能感兴趣的:(WEB技术)