開始nodejs+express的學習+實踐(8)

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設置和判斷,加密模塊的學習就是對註冊密碼和登陸密碼的處理,不少不少處理吧,那都不屬於入門的了,不在作學習和實踐介紹了。

下一篇就是爬蟲抓取的介紹,最簡單的操做一次。

相關文章
相關標籤/搜索