在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;
|