1.拦截器

拦截器可以根据需要 做权限拦截 登录只是权限的一种,

思路是req.session.user判断用户session是否存在,是否是需要拦截的地址,

如果是就跳转登录页,或其他页,

如果非需拦截页,则执行 next(); 放行

因为是顺序执行的所以 app.all('/*', function(req, res, next){   这个方法需放在定义的路由之上

具体写法如下:

//登录拦截器
app.all('/*', function(req, res, next){
if (req.session.user) {
next();
}else {
var arr = req.url.split('/');// 解析用户请求的路径 for (var i = 0, length = arr.length; i < length; i++) {// 去除 GET 请求路径上携带的参数
arr[i] = arr[i].split('?')[0];
}
if (arr.length > 1 && arr[1] == '') {// 判断请求路径是否为根、登录、注册、登出,如果是不做拦截
next();
} else if (arr.length > 2 && arr[1] == 'user' && (arr[2] == 'register' || arr[2] == 'login' || arr[2] == 'logout' || arr[2].indexOf('login') > 0 )) {
next();
} else { // 登录拦截
req.session.originalUrl = req.originalUrl ? req.originalUrl : null; // 记录用户原始请求路径
req.flash('error', '请先登录');
res.redirect('/user/login'); // 将用户重定向到登录页面
}
}
});

结尾附上我的app.js:

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var bodyParser = require('body-parser');
var hbs = require('hbs');
var flash = require('connect-flash'); var index = require('./routes/index');
var users = require('./routes/users');
var about = require('./routes/about');
var list_ = require('./routes/product/list');
var login = require('./routes/user/login');
var login_post = require('./routes/user/login_post'); var app = express(); app.use(cookieParser());
app.use(session({
secret: '123456',
cookie: {maxAge: 60 * 1000 * 30},
resave: false,
saveUninitialized: true
})); app.use(flash()); hbs.registerPartials(path.join(__dirname, 'views', 'partials' ));
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs'); var blocks = {}; hbs.registerHelper('extend', function(name, context) {
var block = blocks[name];
if (!block) {
block = blocks[name] = [];
} block.push(context.fn(this)); // for older versions of handlebars, use block.push(context(this));
}); hbs.registerHelper('block', function(name) {
var val = (blocks[name] || []).join('\n'); // clear the block
blocks[name] = [];
return val;
}); // 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());
app.use(express.static(path.join(__dirname, 'public'))); //登录拦截器
app.all('/*', function(req, res, next){
if (req.session.user) {
next();
}else {
var arr = req.url.split('/');// 解析用户请求的路径 for (var i = 0, length = arr.length; i < length; i++) {// 去除 GET 请求路径上携带的参数
arr[i] = arr[i].split('?')[0];
}
if (arr.length > 1 && arr[1] == '') {// 判断请求路径是否为根、登录、注册、登出,如果是不做拦截
next();
} else if (arr.length > 2 && arr[1] == 'user' && (arr[2] == 'register' || arr[2] == 'login' || arr[2] == 'logout' || arr[2].indexOf('login') >= 0 )) {
next();
} else { // 登录拦截
req.session.originalUrl = req.originalUrl ? req.originalUrl : null; // 记录用户原始请求路径
req.flash('error', '请先登录');
res.redirect('/user/login'); // 将用户重定向到登录页面
}
}
}); app.use('/', index);
app.use('/users', users);
app.use('/about', about);
app.use('/product/list', list_);
app.use('/user/login', login);
app.use('/user/loginPost', login_post); // 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 handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page
res.status(err.status || 500);
res.render('error');
}); module.exports = app;

2.request接口请求

request模块安装:$npm install request --save-dev

引入模块:var request = require('request');

可以传入一个callback回调函数 执行 请求后数据

 var url = "https://xxxxxx/login";
//var md5 = crypto.createHash('md5');//md5加密模块
//pwd = md5.update(pwd).digest('hex'); var formData = {
user_name: userName,
passwd: pwd,
access_token: "1"
};
request.post({url:url, formData: formData}, function(err, httpResponse, body) {
if (err) {
console.error('failed:', err);
callback && callback(err);
}else{
var data = eval('(' + body + ')');
if (data.errorCode == 0) {
var userInfo = data.data;
callback && callback(userInfo);
}
}
});

node express 登录拦截器 request接口请求的更多相关文章

  1. nodejs+express中设置登录拦截器

    在nodejs+express中,采用nodejs后端路由控制用户登录后,为了加强前端的安全性控制,阻止用户通过在浏览器地址栏中输入地址访问后台接口,在app.js中需要加入拦截器进行拦截: /*** ...

  2. Struts2 在登录拦截器中对ajax请求的处理

    前言: 由于ajax请求不像http请求,可以直接进行页面跳转,你返回的所有东西,ajax都只会识别为一个字符串. 之前尝试的方法是在拦截器中返回一个标识给ajax,然后再在每一个ajax请求成功之后 ...

  3. 大型运输行业实战_day05_1_登录+注销+表单重复提交+登录拦截器

    1.登录 登录实现如下步骤: 1.在首页中添加登录按钮 html代码如下: <%@ page contentType="text/html;charset=UTF-8" la ...

  4. 用户登录拦截器查询到登录用户后如何将用户信息传递到后面的Controller

    taotao创建订单代码中之前忘了加入用户信息,那么加上呢? 分析:用户创建订单的时候,我们会强制要求用户先登录,也就是说,创建订单的Controller执行时,一定是用户已经登录了的,而用户只要登录 ...

  5. 学习axios必知必会(2)~axios基本使用、使用axios前必知细节、axios和实例对象区别、拦截器、取消请求

    一.axios的基本使用: ✿ 使用axios前必知细节: 1.axios 函数对象(可以作为axios(config)函数使用去发送请求,也可以作为对象调用方法axios.request(confi ...

  6. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...

  7. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求   Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java ...

  8. sessionStorage记录返回前端的数据,用于解决登录拦截器刷新页面的问题

    1.问题出现的场景与解决 实现一个登录拦截器,重写doFilter方法,判断用户的登录状态,在用户长时间未操作或者异地登录时前端进行提示,完整代码如下 public class LoginValida ...

  9. 实现Feign请求拦截器,对请求header等参数进行转发

    参考:Feign传递请求头信息(Finchley版本) 问题:通过Feign远程调用服务,无法传递header参数. 解决方式:实现RequestInterceptor接口(对所有的Feign请求进行 ...

随机推荐

  1. C++学习之虚函数继承和虚继承

    虚函数的定义要遵循以下重要规则: 1.如果虚函数在基类与派生类中出现,仅仅是名字相同,而形式参数不同,或者是返回类型不同,那么即使加上了virtual关键字,也是不会进行晚绑定的. 2.只有类的成员函 ...

  2. IOS 制作版本新特性

    创建版本新特性 页面(存放图片) HMNewfeatureViewController.m #define HMNewfeatureImageCount 4 #import "HMNewfe ...

  3. SQL随手记

    数据库改名 想要达到的效果,类似于将一个文件[复制粘贴重命名]. 0.首先得断开连接,复制一份备份.然后再连接上,进行下面的操作. 1.在树形上,选中要改名的数据库,右键重命名. 2.还是它,右键,属 ...

  4. 缓冲区溢出实战教程系列(三):利用OllyDbg了解程序运行机制

    想要进行缓冲区溢出的分析与利用,当然就要懂得程序运行的机制.今天我们就用动态分析神器ollydbg来了解一下在windows下程序是如何运行的. 戳这里看之前发布的文章: 缓冲区溢出实战教程系列(一) ...

  5. 关于css 中position使用的浅谈

    在css中有一种属性position.在W3C上我们可以找到他又一下几种属性:absolute.fixed.relative.static.inherit.但是position的使用却并不是简简单单的 ...

  6. 第9章 初识HAL固件库

    本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.<Cortex-M3权威指南>, STM32 HAL库帮助文档:<STM32F ...

  7. js世界这么大,闭包想看看

    什么是闭包,为什么要用他?闭包是能够访问其他函数作用域的函数.我们来分析下句子成分(语文大神),闭包是函数,js函数的作用域分为全局作用域,局部作用域,eval作用域,并没有块级作用域形象的讲,每个函 ...

  8. Android Realm初试

    Realm is a mobile database that runs directly inside phones, tablets or wearables. This repository h ...

  9. Android 最新学习资料收集

    收集这份资料的灵感来源于我的浏览器收藏夹快爆了,后来在github 上也看到了很优秀的开源库的收集资料,非常的好,但是太过于多,也不够新,所以决定自己来做一个.原始的markdowm文件已经放到git ...

  10. Qt.5.9.6移植

    工具及软件包 交叉编译工具链 arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 软件包 dbus-1.10.0.tar.g ...