nodejs+express中設置登陸攔截器

在nodejs+express中,採用nodejs後端路由控制用戶登陸後,爲了增強前端的安全性控制,阻止用戶經過在瀏覽器地址欄中輸入地址訪問後臺接口,在app.js中須要加入攔截器進行攔截:javascript

/*************************導入須要的包************************************************/html

1
2
3
4
5
6
7
var  express = require( 'express' );
var  path = require( 'path' );
var  favicon = require( 'serve-favicon' );
var  logger = require( 'morgan' );
var  cookieParser = require( 'cookie-parser' ); //一、引入cookie模塊,攔截器中req.cookies.userCookies是依賴於該模塊的;
var  bodyParser = require( 'body-parser' );
var  ejs=require( "ejs" );

/**************************設置nodejs路由對應的文件***************************/前端

1
2
3
4
5
6
7
8
9
var  index = require( './routes/index' );
var  ccap=require( './routes/ccap' );
var  jiami=require( "./routes/jiami" );
var  changePwd=require( './routes/changePwd' );
var  login=require( "./routes/login" );
var  business=require( "./routes/pay/business" );
var  logs=require( "./routes/pay/logs" );
var  channel=require( "./routes/pay/channel" );
var  config=require( "./routes/pay/config" );

/******************express配置模板視圖**********************************/java

1
2
3
4
5
6
var  app = express();
// view engine setup
app.set( 'views' , path.join(__dirname,  'views' ));
//app.set('view engine', 'ejs');//設置視圖爲ejs引擎
app.engine( 'html' ,ejs.__express);  //設置視圖爲html引擎,ejs在頁面仍然可用
app.set( 'view engine' 'html' ); //設置視圖爲html引擎,ejs在頁面仍然可用

/******************引入要使用的模塊**********************************************/node

1
2
3
4
5
6
7
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger( 'dev' ));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended:  false  }));
app.use(cookieParser()); //二、引入cookie,h後可開始使用cookie模塊獲取客戶端的cookies;
app.use(express. static (path.join(__dirname,  'public' )));

/*************************登陸攔截器**************************************/express

1
2
3
4
5
6
7
8
9
10
11
app.use( function  (req, res, next) {
     var  url = req.originalUrl; //獲取瀏覽器中當前訪問的nodejs路由地址;
     var  userCookies=req.cookies.userCookies;  //獲取客戶端存取的cookie,userCookies爲cookie的名稱;//有時拿不到cookie值,多是由於攔截器位置放錯,獲取該cookie的方式是依賴於nodejs自帶的cookie模塊,//所以,獲取cookie必須在1,2步以後才能使用,不然拿到的cookie就是undefined.
     console.log( "123" +url);
     console.log( "app得到cookie" +req.cookies.userCookies+ "真假11111:" +(req.cookies.userCookies==undefined));
 
     if (url== '/login' &&!(userCookies==undefined)){  //經過判斷控制用戶登陸後不能訪問登陸頁面;
         return  res.redirect( '/' ); //頁面重定向;
     }
     next();
});

/*********************************node路由配置**********************************/json

1
2
3
4
5
6
7
8
9
app.use( '/' , index);
app.use( '/ccap' ,ccap);
app.use( "/app/jiami" ,jiami);
app.use( "/login" ,login);
app.use( "/changePwd" ,changePwd);
app.use( "/business" ,business);
app.use( "/logs" ,logs);
app.use( "/channel" ,channel);
app.use( "/config" ,config);

/*******************************捕獲異常***********************************/後端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// catch 404 and forward 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.status(err.status || 500);
     res.render( 'error' , {
       message: err.message,
       error: err
     });
   });
}
 
// production error handler
// no stacktraces leaked to user
app.use( function (err, req, res, next) {
   res.status(err.status || 500);
   res.render( 'error' , {
     message: err.message,
     error: {}
   });
});
 
 
module.exports = app;
相關文章
相關標籤/搜索