Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:从本质上来说,一个 Express 应用就是在调用各种中间件。
继续上节的教程;
添加中间件body-parser,用来处理post提交过来的数据;
在app.js中加入
var bodyParser=require('body-parser');
/**
* //bodyParser配置
* 返回一个只解析urlencoded消息体的中间件,
*
* urlencoded:url编码,只接受utf-8对消息体进行编码,
* 在前台返回的req对象添加一个新属性body,同时支持自动的gzip/deflate编码解析过的消息放在req.body对象中,
* 这个对象包含的键值对
* 当extended设置为true,是任何类型
* 当extended为false的时候,是string或者一个数组。
* extended:如果设置为false,那么对URL-encoded的数据的解析采用querystring库,如果设置为true那么采用qs
*/
app.use(bodyParser.urlencoded({extended:true}))
在api中改写代码;
/**
* 用户注册
*
* router.post:
* //处理任何以"/user/register"结束的请求
*/
router.post('/user/register',function (req,res,next) {
console.log(req.body)
});
在页面上点击注册。 后台将会console 返回;{ username: '', password: '' }
注册要做的事情
设置一个统一的返回给前端的中间件
//统一返回方式;
var resoinseData;
/**
* router.use([path],function)
* 当前路由将会使用此中间件
*/
//
router.use(function (req,res,next) {
resoinseData={
code:0,
message:''
}
next();
})
/**
* 用户注册
* 1,用户名是否存在;数据库查询;
* router.post:
* 处理任何以"/user/register"结束的请求
*/
router.post('/user/register',function (req,res,next) {
console.log(req.body)
var username=req.body.username;
var password=req.body.password;
if(username==''||password==''){
resoinseData.code=1
resoinseData.message='用户名或密码不能为空!'
res.json(resoinseData);//json格式返回给前端;
return
}else{
res.json(resoinseData)
}
});
用户点击注册
操作数据库,查询用户名是否被注册,
/schemas/users.js
var mongoose=require('mongoose')
//用户的表结构
module.exports=new mongoose.Schema({
//用户名,密码
username:String,
password:String
})
/models/User.js
var mongoose=require('mongoose');
var userSchema=require('../schemas/users');
//数据库会自动把User生成为Users
module.exports=mongoose.model('User',userSchema);//新建名为User的数据库表
api.js中写入
var User=require('../models/User')
router.post('/user/register',function (req,res,next) {
console.log(req.body)
var username=req.body.username;
var password=req.body.password;
if(username==''||password==''){
resoinseData.code=1
resoinseData.message='用户名或密码不能为空!'
res.json(resoinseData);//json格式返回给前端;
return
}
//findOne 查询是否存在用户名。如果存在说明用户已被注册
User.findOne({
username:username
}).then(function (userInfo) {
console.log(userInfo,"userInfo");
if(userInfo){
resoinseData.code=2
resoinseData.message='用户名已被注册!'
res.json(resoinseData);
return
}
//保存数据;
var user=new User(req.body);
return user.save();
}).then(function (newUserInfo) {
console.log(newUserInfo,"newUserInfo");
resoinseData.message='操作成功!'
res.json(resoinseData)
})
});
前端index.html中 ,注册请求改为:
register: function () {
if(this.pwd==''||this.pwd2==''){
alert("用户名或密码不能为空")
return;
}
if(this.pwd!=this.pwd2){
alert("密码不一致!")
this.pwd=this.pwd2=''
return;
}
this.page = 1;
$.ajax({
type: 'post',
url: "/api/user/register",
data: {username: this.username, password: this.pwd},
dataType:'json',
success: function (result) {
if(result.code==200){
console.log(result)
vm.page = 0;
alert(result.message)
}else{
alert(result.message)
}
}
});
}
数据库:
后台
同理,登录也是如此操作:
api.js中
router.post('/user/login',function (req,res,next) {
console.log(req.body)
var username=req.body.username;
var password=req.body.password;
if(username==''||password==''){
resoinseData.code=1
resoinseData.message='用户名或密码不能为空!'
res.json(resoinseData);//json格式返回给前端;
return
}
//findOne 查询是否存在用户名。如果存在说明用户已被注册
User.findOne({
username:username,
password:password
}).then(function (userInfo) {
console.log(userInfo,"userInfo");
if(!userInfo){
resoinseData.code=2
resoinseData.message='用户名或密码错误'
res.json(resoinseData)
}else{
resoinseData.code=200
resoinseData.message='操作成功!'
res.json(resoinseData)
}
})
});
index.html
login: function () {
$.ajax({
type: 'post',
url: "/api/user/login",
dataType:'json',
data: {username: this.username, password: this.pwd},
success: function (result) {
if(result.code==200){
console.log(result)
vm.page = 2;
alert(result.message)
}else{
alert(result.message)
}
}
});
},
在实际的开发过程中。密码都需要加密后再传给后台。这里就不一一解了。常见的有sha1或md5