添加視圖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); } }) })
到這裏關於商品頁的展現和添加就完成了,在下一節裏咱們將實現商品頁商品加入購物車並結算的功能,繼續加油吧!