开始nodejs+express的学习+实践(8)
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
1.session使用
介紹的非常詳細: http://www.cnblogs.com/chenchenluo/p/4197181.html
對比我們的app.js需要引入express-session模塊和使用這個模塊,在package依賴,并加載。
我們修改app.js
我們既然有了session,我們開始測試使用,在訪問首頁我們就是設(shè)置session內(nèi)容,當我們跳轉(zhuǎn)時,比如到hello,我們是還能訪問到設(shè)置session的值,這就表示session安裝成功。
index.js對首頁和hello修改,加入session賦值
????app.get('/',function(req,?res){var?currentpage=req.query.currentpage?req.query.currentpage:1;model.model_index(currentpage,function(items,len,allpage){req.session.love?=?'我愛你';res.render('index',?{?title:?'Express',hello:?'hello?world!',arr:?items,len:len,allpage:allpage,cur:currentpage,love:?req.session.love?});});});app.get('/hello',??function(req,?res){var?currentpage=req.query.currentpage?req.query.currentpage:1;model.model_hello(currentpage,function(items){res.render('hello',?{?arr:?items,love:?req.session.love?});});});在index.html和hello.html顯示session內(nèi)容:
<h1><%=?love?%></h1>我們訪問首頁和hello:
我們在訪問首頁,會給session賦值,當我們跳到hello頁面,,req對象的session值我們還是可以拿到,所以就在hello頁面可以顯示了。
用途最常用的就是我們登陸后其他頁面登錄信息的顯示。
session是安裝很簡單,加載模塊,設(shè)置參數(shù)就可以使用了,刪除session我們就可以對
req.session.con=null的設(shè)置就ok了。
index.js修改如下:
var?formidable?=?require('formidable'); var?fs?=?require('fs'); var?crypto?=?require('crypto'); var?model?=?require('../model/model'); function?rout(app){app.get('/',function(req,?res){var?currentpage=req.query.currentpage?req.query.currentpage:1;model.model_index(currentpage,function(items,len,allpage){req.session.love?=?'我愛你';res.render('index',?{?title:?'Express',hello:?'hello?world!',arr:?items,len:len,allpage:allpage,cur:currentpage,love:?req.session.love?});});});app.get('/hello',??function(req,?res){var?currentpage=req.query.currentpage?req.query.currentpage:1;model.model_hello(currentpage,function(items){res.render('hello',?{?arr:?items,love:?req.session.love?});});});app.get('/hellomore',??function(req,?res){model.model_hello(req.query.more,function(items){res.send(items);});});app.get('/list',??function(req,?res){res.render('list',?{?text:?req.query.id?});});app.get('/login',??function(req,?res){res.render('login');});app.post('/logincheck',??function(req,?res){var?user=?req.body.user;var?pass=?req.body.pass;if(user=="tom"?&&?pass=="tom"){res.redirect('/');}else{res.redirect('/login');};});app.get('/file',??function(req,?res){res.render('file');});app.post('/upfile',??function(req,?res){//codevar?form?=?new?formidable.IncomingForm();form.uploadDir?=?"./upload";form.parse(req,?function(err,?fields,?files)?{if?(err)?{res.redirect('/file');}var?tmp_path,?target_path;if?(files.file.size?>?0)?{?//表示有文件上傳tmp_path?=?files.file.path;//內(nèi)存中的文件,當前文件目錄var?picType?=??files.file.name.split(".")[1];//后綴名//移動目的目錄target_path?=?'./public/images/pic_1.'?+?picType;//同步方式移動文件fs.renameSync(tmp_path,?target_path);}else{res.redirect('/file');};});});app.get('/fs',??function(req,?res){fs.writeFile('./fs/me/1.txt',?'read?me','utf8',function?(err)?{if?(err)?throw?err;});});app.get('/crypto',??function(req,?res){var?pass="admin";var?md5?=?crypto.createHash('md5');var?mpass=md5.update(pass).digest('hex');var?rmpass=mpass.substring(2);res.render('crypto',?{?res:pass,resm:mpass,resrm:rmpass?});});app.get('/globals',??function(req,?res){res.render('globals',?{?res:__dirname+":"+__filename?});}); }; exports.rout=rout;app.js的修改:
var?express?=?require('express'); var?http?=?require('http'); var?path?=?require('path'); var?favicon?=?require('static-favicon'); var?logger?=?require('morgan'); var?cookieParser?=?require('cookie-parser'); var?session?=?require('express-session'); var?bodyParser?=?require('body-parser'); var?routes?=?require('./routes/index'); var?users?=?require('./routes/user'); var?app?=?express(); //?view?engine?setup app.engine('html',?require('ejs').renderFile); app.set('views',?path.join(__dirname,?'views')); app.set('view?engine',?'html'); app.use(favicon()); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(cookieParser()); app.use(session({secret:?'12345',name:?'testapp',???//這里的name值得是cookie的name,默認cookie的name是:connect.sidcookie:?{maxAge:?80000?},??//設(shè)置maxAge是80000ms,即80s后session和相應(yīng)的cookie失效過期resave:?false,saveUninitialized:?true, })); app.use(express.static(path.join(__dirname,?'public'))); app.use(app.router); routes.rout(app); app.get('/users',?users.list); ///?catch?404?and?forwarding?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.render('error',?{message:?err.message,error:?err});}); } //?production?error?handler //?no?stacktraces?leaked?to?user app.use(function(err,?req,?res,?next)?{res.render('error',?{message:?err.message,error:?{}}); });module.exports?=?app;package.json
{"name":?"application-name","version":?"0.0.1","private":?true,"scripts":?{"start":?"node?./bin/www"},"dependencies":?{"express":?"~3.4.8","static-favicon":?"~1.0.0","morgan":?"~1.0.0","cookie-parser":?"~1.0.1","body-parser":?"~1.0.0","debug":?"~0.7.4","ejs":?"~0.8.5","formidable":?"*","mongodb":"*","mongoskin":"*","express-session":"*"} }2.總結(jié)
到這里關(guān)于nodejs+express的學(xué)習(xí)和實踐就幾乎結(jié)束了,
當然一個網(wǎng)站一般會有下面功能:
注冊
登錄
數(shù)據(jù)顯示
數(shù)據(jù)添加,修改,刪除等等等
我們在分頁那里學(xué)了數(shù)據(jù)的查詢,其他的都算是類似處理,自己摸索就可以了,
還有登錄的操作,其實session就是為登陸后使用的,前面文件上傳操作也是為頭像做基礎(chǔ)的,驗證碼也是要在session設(shè)置和判斷,加密模塊的學(xué)習(xí)就是對注冊密碼和登錄密碼的處理,很多很多處理吧,那都不屬于入門的了,不在做學(xué)習(xí)和實踐介紹了。
下一篇就是爬蟲抓取的介紹,最簡單的操作一次。
轉(zhuǎn)載于:https://my.oschina.net/tbd/blog/552734
總結(jié)
以上是生活随笔為你收集整理的开始nodejs+express的学习+实践(8)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JPA字段长度 Mysql数据库
- 下一篇: PHPer转战Android的学习过程以