添加视图html
前面咱们已经实现了注册功能,用户能够成功注册,接着咱们就开始让用户登陆了,此节咱们就实现用户的登陆功能,而且登陆成功后跳转商品页面查看商品。ajax
首先,咱们仍是在views
目录下添加登陆视图页面 —— login.html
,效果图以下:session
访问视图app
有了登陆页面,那么注册页面(register
)的登陆按钮添加指向登录页面的连接,相应的登录页的注册按钮也是如此。dom
这里咱们仍是添加一个相对应的文件用来处理login
页面的请求,routes
目录下新建名为login.js
的文件,先来增长一个处理get
请求的方法,代码参考以下:函数
module.exports = function (app) { app.get('/login', function (req, res) { res.render('login'); }) };
和register
文件同样添加到index.js
中,以下:post
require('./login')(app);
register
视图页的register()
函数的回调中,当注册成功时咱们就能够跳转到登录页面了,以下:ui
location.href = 'login';
试试登录、注册按钮可否成功跳转!url
实现登录spa
咱们为登录按钮增长单击事件和对应函数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
请求处理方法。
关于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 %>
,指定到相应位置便可。
商品页视图
用户登陆成功以后则跳转至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>
请求处理
在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'); } }) }
添加商品
添加商品,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("添加失败!"); } })
商品添加处理
这里咱们就直接在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); } }) })
到这里关于商品页的展现和添加就完成了,在下一节里咱们将实现商品页商品加入购物车并结算的功能,继续加油吧!