1、添加登录视图
添加视图
前面我们已经实现了注册功能,用户可以成功注册,接着我们就开始让用户登录了,此节我们就实现用户的登录功能,并且登录成功后跳转商品页面查看商品。
首先,我们还是在views
目录下添加登录视图页面 —— login.html
,效果图如下:
2、访问登陆视图
访问视图
有了登录页面,那么注册页面(register
)的登录按钮添加指向登陆页面的链接,相应的登陆页的注册按钮也是如此。
这里我们还是添加一个相对应的文件用来处理login
页面的请求,routes
目录下新建名为login.js
的文件,先来增加一个处理get
请求的方法,代码参考如下:
module.exports = function (app) {
app.get('/login', function (req, res) {
res.render('login');
})
};
和register
文件一样添加到index.js
中,如下:
require('./login')(app);
register
视图页的register()
函数的回调中,当注册成功时我们就可以跳转到登陆页面了,如下:
location.href = 'login';
试试登陆、注册按钮能否成功跳转!
3、添加登陆功能
实现登陆
我们为登陆按钮增加单击事件和对应函数login()
,参考如下:
function login() {
var data = $("form").serialize();
$ajax({
url: '/login',
type: 'POST',
data: data,
success: function (data, status) {
if (status == 'success') {
location.href = 'home';
}
},
error: function (data, status) {
if (status == 'error') {
location.href = 'login';
}
}
})
}
在相应的login.js
文件中,我们还得添加相对应的post
请求处理方法。
4、登陆处理
关于login
视图页的post
请求处理,我们需要判断用户所输入用户名是否存在,密码是否正确,并使用变量保存相应提示信息,当用户名和密码全部正确时,则返回成功并保存用户的个人信息,用作来判断用户的登陆状态,具体可参考register
视图页的post
请求。
app.post('/login', function (req, res) {
var User = global.dbHelper.getModel('user'),
uname = req.body.uname;
User.findOne({name: uname}, function (error, doc) {
if (用户不存在) {
req.session.error = '用户名不存在!';
res.sendStatus(404);
} else if (用户存在, 密码错误) {
req.session.error = "密码错误!";
res.sendStatus(404);
} else {
req.session.user = doc;
res.sendStatus(200);
}
})
});
还记得我们登陆的本地变量message
嘛,用来保存html
标签并包含相应提示信息,这里在登陆页面我们也可以使用,用法:<%- message %>
,指定到相应位置即可。
5、添加商品页视图
商品页视图
用户登录成功之后则跳转至home
视图页面(商品主页),就可以进行对商品的浏览和选择了。
还是views
目录,添加home
商品视图页,如下简单效果图:
用户成功登录之后跳转至home
页,这里我们还是做分开处理,routes
目录下新建home.js
文件用来处理来自home
也的get
请求。
这里我们假设如果用户未登录将不能查看商品主页,所以,在请求处理中我们还需要判断用户的登陆状态,这个可以使用我们在登录处理时所保存的用户个人信息。
关于商品页的视图展示我们只需要有其名称、价格、图片,这里使用ejs
模板循环展示,可参考如下方式:
注:Commodity
:商品集合所有数据,内置图片路径为“/example/img”
<ul class="spys">
<%for(var i in Commoditys){
if(!Commoditys[i].name) continue;%>
<li class="spys li">
<div>
<img src="img/<%=Commoditys[i].imgSrc%>" width="80" height="100">
</div>
<div>
<a><%=Commoditys[i].name%></a>
<strong style="color: red;">¥<%=Commoditys[i].price%></strong>
</div>
<div>
<a class="btn btn-success" style="width: 120px;" href="">加入购物车</a>
</div>
</li>
<%}%>
</ul>
6、商品页请求处理
请求处理
在home
的get
请求处理中,我们需要首先判断用户的登陆状态,只有用户登录了方可跳转到商品页,如果为登陆呢则跳转到登录页,而且在进入商品页的时候并传入Commodity
集合的所有数据数据在页面展示。
首先呢,在models.js
文件中定义Commodity
集合的Schema
属性,共包括商品名称、商品价格、商品图片,这里简单定义如下:
commodity: {
name: String,
price: Number,
imgSrc: String
}
routes
目录下添加home.js
文件(index.js
文件中引用)。
具体处理方式可参考如下代码:
module.exports = function (app) {
app.get('/home', function (req, res) {
if (req.session.user) {
var Commodity = global.dbHelper.getModel('commodity');
Commodity.find({}, function (error, docs) {
//将Commoditys变量传入home模板
res.render('home', {Commoditys: docs});
})
} else {
req.session.error = "请先登录";
res.redirect('/login');
}
})
}
7、商品添加视图页
添加商品
添加商品,views
目录下添加addcommodity
视图页面用来对商品的添加,这里简单样式参考如下:
相对应的addcommodity
函数参考代码如下:
//imgSrc表示图片路径),这里内置了5张图片,格式为:xmsz-X.jpg(X为1-5数字)。
var data = $("form").serialize() + "&imgSrc=" + "xmsz-" + Math.floor(Math.random() * 5 + 1) + ".jpg";
$ajax({
url: './addcommodity',
type: 'POST',
data: data,
success: function (data, status) {
if (status == 'success') {
alert("添加成功!");
}
},
error: function (data, err) {
alert("添加失败!");
}
})
8、商品添加请求处理
商品添加处理
这里我们就直接在home.js
文件中添加保存商品的处理方法,如下:
app.get('/addcommodity', function (req, res) {
res.render('addcommodity');
});
app.post('./addcommodity', function (req, res) {
var Commodity = global.dbHelper.getModel('commodity');
Commodity.create({
name: req.body.name,
price: req.body.price,
imgSrc: req.body.imgSrc
}, function (error, doc) {
if (doc) {
res.sendStatus(200);
} else {
res.sendStatus(404);
}
})
})
到这里关于商品页的展示和添加就完成了,在下一节里我们将实现商品页商品加入购物车并结算的功能,继续加油吧!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。