1.session使用html
介紹的很是詳細: http://www.cnblogs.com/chenchenluo/p/4197181.htmlnode
對比咱們的app.js須要引入express-session模塊和使用這個模塊,在package依賴,並加載。mongodb
咱們修改app.jsexpress
咱們既然有了session,咱們開始測試使用,在訪問首頁咱們就是設置session內容,當咱們跳轉時,好比到hello,咱們是還能訪問到設置session的值,這就表示session安裝成功。json
index.js對首頁和hello修改,加入session賦值cookie
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內容:session
<h1><%= love %></h1>
咱們訪問首頁和hello:app
咱們在訪問首頁,會給session賦值,當咱們跳到hello頁面,,req對象的session值咱們仍是能夠拿到,因此就在hello頁面能夠顯示了。post
用途最經常使用的就是咱們登錄後其餘頁面登陸信息的顯示。學習
session是安裝很簡單,加載模塊,設置參數就可使用了,刪除session咱們就能夠對
req.session.con=null的設置就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){ //code var 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;//內存中的文件,當前文件目錄 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.sid cookie: {maxAge: 80000 }, //設置maxAge是80000ms,即80s後session和相應的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.總結
到這裏關於nodejs+express的學習和實踐就幾乎結束了,
固然一個網站通常會有下面功能:
註冊
登陸
數據顯示
數據添加,修改,刪除等等等
咱們在分頁那裏學了數據的查詢,其餘的都算是相似處理,本身摸索就能夠了,
還有登陸的操做,其實session就是爲登錄後使用的,前面文件上傳操做也是爲頭像作基礎的,驗證碼也是要在session設置和判斷,加密模塊的學習就是對註冊密碼和登陸密碼的處理,不少不少處理吧,那都不屬於入門的了,不在作學習和實踐介紹了。
下一篇就是爬蟲抓取的介紹,最簡單的操做一次。