中间件(Middleware)
中间件可以通过Connect传入express.createServer(),就像正常的连接服务器一样,比如:
var express = require('express');
var app = express.createServer(
express.logger(),
express.bodyParser()
);
另外,在configure()函数块中利用use()函数增加中间件,也是一种很好的方式。
app.use(express.logger({ format: ':method :uri' }));
通常连接中间件可以通过require(‘connect’)的方式,如:
var connect = require('connect');
app.use(connect.logger());
app.use(connect.bodyParser());
这让人感觉有些不太爽,于是express重新输出了(re-exports)这些中间件属性,但是在使用上保持了一致性:
app.use(express.logger());
app.use(express.bodyParser());
路由中间件(Route Middleware)
这里路径映射也可以理解为路由的意思,路由通过传入一个或多个附加的回调函数(或数组)到方法中,从而可以利用特定路由的中间件。该功能对限制访问以及加载路由使用的数据非常有用。
通常情况下异步数据的查询看起来像下面的样子,这里我们使用:id参数,并尝试获取一个用户。
app.get('/user/:id', function(req, res, next){
loadUser(req.params.id, function(err, user){
if (err) return next(err);
res.send('Viewing user of csser.com ' + user.name);
});
});
为了保持代码整洁并且提高可读性,我们可以在中间件内部应用该逻辑。正如你所看到的,将逻辑抽象到中间件里让我们达到一定程度的复用,同时代码更干净。
function loadUser(req, res, next) {
// 这里提供假数据,你可以从数据库中获取真实用户信息
var user = users[req.params.id];
if (user) {
req.user = user;
next();
} else {
next(new Error('不存在的用户 ' + req.params.id));
}
}
app.get('/user/:id', loadUser, function(req, res){
res.send('正在查看用户 ' + req.user.name);
});
一回注:看到了吗?上面的路径映射的回调函数参数是可以支持多个的。
多重路由中间件可以被按照顺序来执行,从而可以实现更复杂的逻辑,比如限制访问某个用户的访问权限,下面的代码将只允许认证用户才可以编辑其帐号信息。
function andRestrictToSelf(req, res, next) {
req.authenticatedUser.id == req.user.id
? next()
: next(new Error('无权限'));
}
app.get('/user/:id/edit', loadUser, andRestrictToSelf, function(req, res){
res.send('开始编辑用户 ' + req.user.name);
});
请记住中间件是简单的函数,我们还能定义返回中间件的函数,从而可以创建一个更有表现力和更易用的如下方案:
function andRestrictTo(role) {
return function(req, res, next) {
req.authenticatedUser.role == role
? next()
: next(new Error('无权限'));
}
}
app.del('/user/:id', loadUser, andRestrictTo('admin'), function(req, res){
res.send('已删除用户 ' + req.user.name);
});
一回注:app.del的第三个参数之所以可以这样写,是因为其返回的是一个函数,而该函数可以访问’admin’的值,这里涉及到闭包的概念,如有疑问请在CSSer.com查找闭包相关文章。
通常使用的中间件的“栈”可以被作为数组(递归应用)传入,如此可以被混合并能匹配更复杂的功能。
var a = [middleware1, middleware2]
, b = [middleware3, middleware4]
, all = [a, b];
app.get('/foo', a, function(){});
app.get('/bar', a, function(){});
app.get('/', a, middleware3, middleware4, function(){});
app.get('/', a, b, function(){});
app.get('/', all, function(){});
可以去express源码仓库查看完整的路由中间件示例。
相关推荐
本篇文章主要介绍了nodejs开发——express路由与中间件 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
- Express中间件进行服务的配置,路由、请求的处理 - 官网 http://www.expressjs.com.cn/ - Mysql中间件处理与数据库的"通信" - Body-Parser中间件进行前端请求参数的获取 - 使用jwt对token进行加密 - multer中间件...
Express中间件进行服务的配置,路由、请求的处理 Mysql中间件处理与数据库的"通信" Body-Parser中间件进行前端请求参数的获取 Cookie-Parser、Cookie-Session进行cookie与session的处理 首页数据的展示 分类页数据...
使用Redis的NodeJS速率限制和响应延迟-包括Express中间件。 Limitrr可以为NodeJS应用程序中的各种路由提供速率限制和“响应延迟”。 与其他类似的程序包不同,此实用程序允许用户不仅限制请求的数量,而且还限制已...
最近公司在使用node做前后端分离,采用的web框架是express,所以对express框架进行了深入的了解,前段时间写了篇关于express路由的文章,但是在那篇文章中貌似少了一个很重要的内容,就是express的next,所以今天...
Jello express服务端api映射框架要解决的问题前后端分离的开发方案中,前端的数据层被剥离出来而独立存在,通常数据层由服务端的api来提供,这就导致我们需要在Express的路由层反复的配置;一方面会导致重复劳动,...
如果您不太了解中间件的含义,Nodejs框架Express里的中间件可以帮助您了解它们的工作原理。 但是,中间件仅适用于后端吗? 不,当应用程序中有路由时,中间件在前端或后端中就会非常常见。比如现在流行的单页应用...
Expressive是基于ExpressJ和最佳实践构建的NodeJS REST API框架,可实现顺畅的开发。 功能包括: 模板路由轻松编写具有声明性终结点(包括嵌套终结点)的API 具有内置功能的可插拔中间件 像Express一样注入自己的...
快速版本路由 该npm软件包提供了ExpressJS中间件,用于基于api版本加载路由控制器。 用15行代码实现API版本控制: 现在,将根据request.version使用适当的路由处理程序处理任何请求。用法创建一个映射,其中的键是受...
- 1、express 用来实现项目的web服务,路由功能,静态模块 地址: https://github.com/expressjs/express 它的很多常用的中间件可以在这个网址找到:http://www.expressjs.com.cn/resources/middleware.html - 3、...
本文实例讲述了nodejs入门教程之express模块用法。分享给大家供大家参考,具体如下: /** * Created by Dason on 2017/3/28. */ var express = require('express'); var morgan = require('morgan');//打印日志的...
提供静态文件工装NPM开始ESLint 安装用于Visual Studio Code的ESLint VS代码中的重构技巧ES6及更高版本Nodemon 环境变量模板引擎哈巴狗将变量/对象传递给模板EJS 范本路由导航分离档案在路由中传递参数路由功能资料...
NodeJS中间件模式框架 您好,访客。 每个产品都有其卖点。 框架软件也不例外。 当我有了这个框架的想法时,我的目标是简化使用Javascript的开发。 如果您曾经使用过Express,您将知道使用它创建HTTP路由是多么容易。...
产品特点Express的基础:路由,中间件,发送响应等猫鼬的基础知识:数据模型,数据验证和中间件RESTful API,包括分页,排序和限制字段MongoDB的CRUD操作安全性:加固,消毒等使用JWT进行身份验证:登录和注册授权...
Multer Express中间件 :recycling_symbol: 一个周末项目,将帮助您仅使用中间件即可轻松设置multer。 :rainbow: 用法 :fire: 安装模块。 yarn add multer-express-middleware 在Express中使用中间件。 const ...
node.js: 最基础的nodejs服务器,看着很原始,不依赖于任何框架。 express.js: 常规的express服务器,中间件的执行很像koa2的洋葱模型,没有看出任何端倪 express_mysterious.js: 通过别的打印和一些await函数,这个...
彩虹基于某些文件夹路径的RESTful API的节点路由器中间件。 Rainbow将所有HTTP请求路由映射到controllers文件夹,每个路由都作为URL的文件路径。安装$ npm install rainbow用法在您的快速应用程序主文件app.js : ...
Express.js中间件 最新稳定版本: 目录 发送阻止活动 调试模式 敏感路线 将特定路由列入白名单 强制执行的特定路线 监控的特定路线 敏感标题 IP头 第一方启用 自定义请求处理程序 附加活动处理程序 丰富自定义参数 ...
内置TypeScript支持,强大的代码自动提示支持内置路由功能及众多常用的中间件,无需重复第三方模块性能主流主流框架代码库轻盈,依赖模块少内置中间件列表: bodyParser请求体解析: json解析application