nodejs之express搭建项目-以注册登陆为例

1.node与npm的安装

2.数据库mongodb的安装

【1】下载mongodb(下载地址:http://www.mongodb.org/downloads)--安装--运行

【2】每次运行mongod –dbpath D:/MongoDB/data命令行来启动MongoDB不方便,

D:\MongoDB\bin>mongod --logpath D:\MongoDB\logs\MongoDB.log --logappend --dbpath D:\MongoDB\data --directoryperdb --serviceName MongoDB --install

【3】进入到你当前MongoDB所在的目录地址
例如我的是放在D盘:cd/d D:\MongoDB\bin

【4】net start mongodb  启动mongodb服务

【5】mongo命令进入数据库

【6】use library   进入数据库 我建立的名称为library   这样本地的数据库就搭建完成

3.express安装

【1】通过命令:npm install express-generator -g 安装到全局

【2】在用express 命令生成项目结构

  express myapp 其中的myapp是你的项目名称

【3】通过cd myapp 进入项目文件中

【4】通过npm install 初始化依赖模块

【5】npm start 开启web服务器

4.express项目目录:


bin--项目的入口文件,配置web服务器端口和一些监听事件。

database--dbHandel.js和models.js主要是定义数据库的数据

node_modules--项目的依赖的的文件模块

public--项目的静态资源,例如css、js等

routes--项目的路由模块

views--视图模版,主要的前端html写在里面

app.js--项目的启动文件,项目的核心。

package.json--模块的包管理,包括项目与模块版本的信息等。

5. app.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var multer = require('multer');

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

var app = express();
//数据库
var mongoose = require('mongoose');
var session = require('express-session');

global.dbHandel = require('./database/dbHandel');
global.db = mongoose.connect("mongodb://localhost:27017/library");
app.use(session({ 
	secret: 'secret',
	cookie:{ 
		maxAge: 1000*60*30
	}
}));
// view engine setup--换成了html模板引擎
app.set('views', path.join(__dirname, 'views'));
app.engine("html",require("ejs").__express); // or   app.engine("html",require("ejs").renderFile);
app.set('view engine', 'html');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(multer());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);
app.use('/manage', routes);
app.use('/register', routes);


//跨域解决cors
app.all('*',function (req, res, next) {
   res.header('Access-Control-Allow-Origin', '*');
   res.header('Access-Control-Allow-Headers', 'Content-Type,Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
   res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE,OPTIONS');
 
   if (req.method == 'OPTIONS') {
       res.send(200);
   }
   else {
       next();
   }
});

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});

module.exports = app;

6.登陆模块:index.html

<!DOCTYPE html>
<html>
<head>
	<title>用户登录</title>
	<meta charset="utf-8">
	<link rel="stylesheet" type="text/css" href="/stylesheets/bootstrap.min.css">
<style type="text/css">
body,div,form,label,input{margin:0;padding: 0;}
	body{
		width:100%;
		height:100%;
		background-color: #AAA;
	}
	#loginList{
		width: 300px;
		height:400px;
		background-color:#fff;
		padding:10px 10px;
		margin: 0 auto;
		margin-top: 10%;
	}
	#loginList h3{
		text-align: center;
		font-size: 20px;
		font-weight: bold;
		margin-bottom: 20px;
	}
	.btn-link{
		float: right;
	}
</style>
</head>
<body>
	<div id="loginPage">
		<form id="loginList">
			<h3>您好!请登录</h3>
		  <div class="form-group">
		    <label for="exampleInputEmail1">用户名</label>
		    <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Email">
		  </div>
		  <div class="form-group">
		    <label for="exampleInputPassword1">密码</label>
		    <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
		  </div>
		  <div class="clickModel">
			  <button type="submit" class="btn btn-primary" id="login">登录</button>
			  <button type="button" class="btn  btn-link" id="register">注册</button>
		  <div>
		</form>
	</div>
<script src="/javascripts/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
	$('#register').click(function(){
		window.location.href='register';
	});
	$('#login').click(function(){
		var username=$('#exampleInputEmail1').val();
		var password=$('#exampleInputPassword1').val();
		var data = {"username":username,"password":password};
		$.ajax({
			url: '/',
			type:'post',
			data:data,
			success: function(data,status){ 
                    if(status == 'success'){
                    alert('登陆成功'); 
                        location.href = 'manage';
                    }
                },
            error: function(data){ 
                if(data.status == '404'){
                	alert('用户名找不到');
                }
                //window.location.reload();
            }
		});
	});
</script>
</body>
</html>

7.注册模块:register.html

<!DOCTYPE html>
<html>
<head>
	<title>注册</title>
	<meta charset="utf-8">
	<link rel="stylesheet" type="text/css" href="/stylesheets/bootstrap.min.css">
<style type="text/css">
	#pageRegister{
		width:60%;
		margin:0 auto;
	}
	#pageRegister h2{
		text-align: center;
	}
	#cardSelect{
		width:120px;
	}
  #login{
    display: inline-block;
    float:right;
  }
  #uploadImage{
    color:blue;
  }
</style>
</head>
<body>
<form id="pageRegister">
	<h2>欢迎使用该系统</h2>
  <div class="form-group has-success">
  <label class="control-label" for="inputSuccess1">*用户名</label>
  <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2">
  <p id="helpBlock1" class="help-block">请使用邮箱</p>
</div>
<div class="form-group has-success">
  <label class="control-label" for="inputPassword">*密码</label>
  <input type="text" class="form-control" id="inputPassword">
  <p id="helpBlock2" class="help-block">请输入密码</p>
</div>
<div class="form-group has-success">
  <label class="control-label" for="inputRepassword">确认密码</label>
  <input type="text" class="form-control" id="inputRepassword">
  <p id="helpBlock3" class="help-block">请确认密码是否正确</p>
</div>
<div class="form-group has-success">
  <label class="control-label" for="inputRepassword">*证件号</label>
    <div class="input-group">
      <div class="input-group-btn">
        <select class="form-control" id="cardSelect">
		  <option>身份证号</option>
		  <option>工作证号</option>
		</select>
      </div><!-- /btn-group -->
      <input type="text" class="form-control" aria-label="..." id="cardNum">
    </div>
  <p id="helpBlock3" class="help-block">请填写有效证件号</p>
</div>
 <div class="form-group has-success" id="uploadImage">
    <label for="exampleInputFile">上传头像</label>
    <input type="file" id="exampleInputImage">
    <p class="help-block4">支持图像png、jpg、bmp等</p>
  </div>
  <div class="clickModel">
	  <button type="submit" class="btn btn-primary" id="register">注册</button>
	  <button type="button" class="btn  btn-link" id="login">登录</button>
  <div>
</form>
<script src="/javascripts/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
	$('#login').click(function(){
		window.location.href='/';
	});
  $('#register').click(function(){
    var username=$('#inputSuccess1').val();
    var password=$('#inputPassword').val();
    var cardNum=$('#cardNum').val();
    var headImage=$('#exampleInputImage').val();
    var data = {"username":username,"password":password,"cardNum":cardNum,"headImage":headImage};
    $.ajax({
      url:'/register',
      type:'post',
      data:data,
      success:function(data,status){
        if (status=='success') {
          location.href='/';
        }
      },
      error:function(data){
        alert('注册失败');
      }
    });
  });
</script>
</body>
</html>

8.路由routes文件里面的index.js

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

/* GET home page. */
router.route("/").get(function(req,res){    // 到达此路径则渲染login文件,并传出title值供 login.html使用
	res.render("index",{title:'index'});
}).post(function(req,res){ 					   // 从此路径检测到post方式则进行post数据的处理操作
	//get User info
	 //这里的User就是从model中获取user对象,通过global.dbHandel全局方法(这个方法在app.js中已经实现)
	var User = global.dbHandel.getModel('user');  
	var username = req.body.username;	
	var password = req.body.password;			//获取post上来的 data数据中 uname的值
	User.findOne({uname:username},function(err,doc){   //通过此model以用户名的条件 查询数据库中的匹配信息
		console.log(doc);
		if(err){ 										//错误就返回给原post处(login.html) 状态码为500的错误
			res.send(500);
			console.log(err);
		}else if(!doc){ 								//查询不到用户名匹配信息,则用户名不存在
			req.session.error = '用户名不存在';
			console.log('用户名不存在');
			res.send(404);							//	状态码返回404
			//res.write( '用户名不存在');
		//	res.redirect("/login");
		}else{ 
			if(req.body.password != doc.upassword){ 	//查询到匹配用户名的信息,但相应的password属性不匹配
				req.session.error = "密码错误";
				res.send(404);
			//	res.redirect("/login");
			}else{ 									//信息匹配成功,则将此对象(匹配到的user) 赋给session.user  并返回成功
				req.session.user = doc;
				res.send(200);
			//	res.redirect("/home");
			}
		}
	});
});

router.route("/manage").get(function(req, res) {
  res.render('manage', { title: 'manage' });
});

router.route("/register").get(function(req,res){    // 到达此路径则渲染login文件,并传出title值供 login.html使用
	res.render("register",{title:'register'});
}).post(function(req,res){ 
	 //这里的User就是从model中获取user对象,通过global.dbHandel全局方法(这个方法在app.js中已经实现)
	var User = global.dbHandel.getModel('user');
	var username = req.body.username;
	var password = req.body.password;
	var cardNum = req.body.cardNum;
	var headImage = req.body.headImage;
	User.findOne({uname: username},function(err,doc){   // 同理 /login 路径的处理方式
		if(err){ 
			req.session.error =  '网络异常错误!';
			console.log(err);
			res.send(500);
		}else if(doc){ 
			req.session.error = '用户名已存在!';
			console.log('用户名已存在')
			res.send(500);
		}else{ 
			User.create({ 							// 创建一组user对象置入model
				uname: username,
				upassword: password,
				cardNum: cardNum,
				headImage: headImage
			},function(err,doc){ 
				 if (err) {
                        console.log(err);
                        res.send(500);
                    } else {
                        //req.session.error = '用户名创建成功!';
            			console.log('用户名创建成功!');
            			res.send(200);
                        //res.redirect("/login"); 
                    }
                  });
		}
	});
});

module.exports = router;
这样,nodejs的express就搭建了一个注册登陆系统,主要是前端bootstrap做UI控件,jquery实现control部分,ajax做前后端的model交互,后端nodejs做服务层,链接mongodb数据库,做一些业务处理,比如对数据库的增删查改。注册部分没有做验证,当然前端与后端都来做验证功能。







  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值